aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-14 11:47:36 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-14 11:47:36 +0000
commitf57601b2426656a014d099ec66828e9f40732492 (patch)
treea155b1c56fa97388956730802aeccf1249a8db74 /src/main/java
parent622c04d788615dc79665203ea9a61e57e1935c49 (diff)
Convert hyperlink with internal anchor to HTML
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/DocumentConverter.java26
-rw-r--r--src/main/java/org/zwobble/mammoth/Mammoth.java4
2 files changed, 24 insertions, 6 deletions
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<HtmlNode> convertToHtml(Document document) {
+ private final String idPrefix;
+
+ public DocumentConverter(String idPrefix) {
+ this.idPrefix = idPrefix;
+ }
+
+ public List<HtmlNode> convertToHtml(Document document) {
return convertChildrenToHtml(document);
}
- private static List<HtmlNode> convertChildrenToHtml(HasChildren element) {
+ private List<HtmlNode> convertChildrenToHtml(HasChildren element) {
return eagerFlatMap(
element.getChildren(),
- DocumentConverter::convertToHtml);
+ this::convertToHtml);
}
- public static List<HtmlNode> convertToHtml(DocumentElement element) {
+ public List<HtmlNode> convertToHtml(DocumentElement element) {
return element.accept(new DocumentElementVisitor<List<HtmlNode>>() {
@Override
public List<HtmlNode> visit(Paragraph paragraph) {
@@ -91,10 +97,20 @@ public class DocumentConverter {
@Override
public List<HtmlNode> visit(Hyperlink hyperlink) {
- Map<String, String> attributes = map("href", hyperlink.getHref().get());
+ Map<String, String> 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<HtmlNode> 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");