From 487bf06d9247b4e2369826af9118c2d4b7dcf0a0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Feb 2016 21:59:28 +0000 Subject: Read text boxes --- .../org/zwobble/mammoth/docx/BodyXmlReader.java | 19 ++++++---- .../java/org/zwobble/mammoth/docx/ReadResult.java | 41 +++++++++++++++++----- 2 files changed, 45 insertions(+), 15 deletions(-) (limited to 'src/main/java/org/zwobble') diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java index c8e1785..19f649a 100644 --- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java @@ -59,12 +59,15 @@ public class BodyXmlReader { case "w:endnoteReference": return readNoteReference(NoteType.ENDNOTE, element); + case "w:pict": + return readPict(element); + case "w:ins": case "w:smartTag": case "w:drawing": - case "w:roundrect": - case "w:shape": - case "w:textbox": + case "v:roundrect": + case "v:shape": + case "v:textbox": case "w:txbxContent": return readElements(element.children()); @@ -90,7 +93,7 @@ public class BodyXmlReader { default: Warning warning = warning("An unrecognised element was ignored: " + element.getName()); - return new ReadResult(list(), list(warning)); + return ReadResult.emptyWithWarning(warning); } } @@ -141,7 +144,7 @@ public class BodyXmlReader { return ReadResult.map( readParagraphStyle(properties), readElements(element.children()), - (style, children) -> new Paragraph(style, numbering, children)); + (style, children) -> new Paragraph(style, numbering, children)).appendExtra(); } private Result> readParagraphStyle(XmlElementLike properties) { @@ -188,7 +191,7 @@ public class BodyXmlReader { if (breakType.equals("")) { return success(LineBreak.LINE_BREAK); } else { - return new ReadResult(list(), list(warning("Unsupported break type: " + breakType))); + return ReadResult.emptyWithWarning(warning("Unsupported break type: " + breakType)); } } @@ -221,6 +224,10 @@ public class BodyXmlReader { return success(new NoteReference(noteType, noteId)); } + private ReadResult readPict(XmlElement element) { + return readElements(element.children()).toExtra(); + } + private Optional readVal(XmlElementLike element, String name) { return element.findChildOrEmpty(name).getAttributeOrNone("w:val"); } diff --git a/src/main/java/org/zwobble/mammoth/docx/ReadResult.java b/src/main/java/org/zwobble/mammoth/docx/ReadResult.java index 7c672b2..31bbf2a 100644 --- a/src/main/java/org/zwobble/mammoth/docx/ReadResult.java +++ b/src/main/java/org/zwobble/mammoth/docx/ReadResult.java @@ -16,12 +16,14 @@ public class ReadResult { public static ReadResult concat(Iterable results) { ImmutableList.Builder elements = ImmutableList.builder(); + ImmutableList.Builder extra = ImmutableList.builder(); ImmutableList.Builder warnings = ImmutableList.builder(); for (ReadResult result : results) { elements.addAll(result.elements); + extra.addAll(result.extra); warnings.addAll(result.warnings); } - return new ReadResult(elements.build(), warnings.build()); + return new ReadResult(elements.build(), extra.build(), warnings.build()); } public static ReadResult map( @@ -29,13 +31,10 @@ public class ReadResult { ReadResult second, BiFunction, DocumentElement> function) { - ImmutableList.Builder warnings = ImmutableList.builder(); - warnings.addAll(first.getWarnings()); - warnings.addAll(second.warnings); - return new ReadResult( list(function.apply(first.getValue(), second.elements)), - warnings.build()); + second.extra, + concat(first.getWarnings(), second.warnings)); } public static ReadResult success(DocumentElement element) { @@ -43,22 +42,46 @@ public class ReadResult { } public static ReadResult success(List elements) { - return new ReadResult(elements, list()); + return new ReadResult(elements, list(), list()); + } + + public static ReadResult emptyWithWarning(Warning warning) { + return new ReadResult(list(), list(), list(warning)); } private final List elements; + private final List extra; private final List warnings; - public ReadResult(List elements, List warnings) { + public ReadResult(List elements, List extra, List warnings) { this.elements = elements; + this.extra = extra; this.warnings = warnings; } public ReadResult map(Function, DocumentElement> function) { - return new ReadResult(list(function.apply(elements)), warnings); + return new ReadResult( + list(function.apply(elements)), + extra, + warnings); + } + + public ReadResult toExtra() { + return new ReadResult(list(), concat(extra, elements), warnings); + } + + public ReadResult appendExtra() { + return new ReadResult(concat(elements, extra), list(), warnings); } public Result> toResult() { return new Result<>(elements, warnings); } + + private static List concat(List first, List second) { + ImmutableList.Builder builder = ImmutableList.builder(); + builder.addAll(first); + builder.addAll(second); + return builder.build(); + } } -- cgit v1.2.3