diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java | 19 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/docx/ReadResult.java | 41 |
2 files changed, 45 insertions, 15 deletions
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<Optional<Style>> 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<String> 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<ReadResult> results) { ImmutableList.Builder<DocumentElement> elements = ImmutableList.builder(); + ImmutableList.Builder<DocumentElement> extra = ImmutableList.builder(); ImmutableList.Builder<Warning> 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 <T> ReadResult map( @@ -29,13 +31,10 @@ public class ReadResult { ReadResult second, BiFunction<T, List<DocumentElement>, DocumentElement> function) { - ImmutableList.Builder<Warning> 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<DocumentElement> 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<DocumentElement> elements; + private final List<DocumentElement> extra; private final List<Warning> warnings; - public ReadResult(List<DocumentElement> elements, List<Warning> warnings) { + public ReadResult(List<DocumentElement> elements, List<DocumentElement> extra, List<Warning> warnings) { this.elements = elements; + this.extra = extra; this.warnings = warnings; } public ReadResult map(Function<List<DocumentElement>, 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<List<DocumentElement>> toResult() { return new Result<>(elements, warnings); } + + private static <T> List<T> concat(List<T> first, List<T> second) { + ImmutableList.Builder<T> builder = ImmutableList.builder(); + builder.addAll(first); + builder.addAll(second); + return builder.build(); + } } |
