diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-14 11:47:36 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-14 11:47:36 +0000 |
| commit | f57601b2426656a014d099ec66828e9f40732492 (patch) | |
| tree | a155b1c56fa97388956730802aeccf1249a8db74 /src/main/java/org | |
| parent | 622c04d788615dc79665203ea9a61e57e1935c49 (diff) | |
Convert hyperlink with internal anchor to HTML
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/DocumentConverter.java | 26 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/Mammoth.java | 4 |
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"); |
