aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-11-23 20:45:24 +0000
committerMichael Williamson <mike@zwobble.org>2017-11-23 20:45:24 +0000
commit7abf1e89a6d9846e2fb3bc8f04e4ca51fe06a511 (patch)
tree3ae0abc0c1b4919cc7bdc949183518cf2477a706 /src/main/java/org/zwobble
parentc46102917dbd63f454f4782effbe239e63c67400 (diff)
Parse paragraph indents
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java13
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/ParagraphIndent.java33
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java19
3 files changed, 63 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java
index a404ae6..58c3453 100644
--- a/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java
@@ -6,11 +6,18 @@ import java.util.Optional;
public class Paragraph implements DocumentElement, HasChildren {
private final Optional<Style> style;
private final Optional<NumberingLevel> numbering;
+ private final ParagraphIndent indent;
private final List<DocumentElement> children;
- public Paragraph(Optional<Style> style, Optional<NumberingLevel> numbering, List<DocumentElement> children) {
+ public Paragraph(
+ Optional<Style> style,
+ Optional<NumberingLevel> numbering,
+ ParagraphIndent indent,
+ List<DocumentElement> children
+ ) {
this.style = style;
this.numbering = numbering;
+ this.indent = indent;
this.children = children;
}
@@ -22,6 +29,10 @@ public class Paragraph implements DocumentElement, HasChildren {
return numbering;
}
+ public ParagraphIndent getIndent() {
+ return indent;
+ }
+
public List<DocumentElement> getChildren() {
return children;
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/ParagraphIndent.java b/src/main/java/org/zwobble/mammoth/internal/documents/ParagraphIndent.java
new file mode 100644
index 0000000..1d5783e
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/ParagraphIndent.java
@@ -0,0 +1,33 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.Optional;
+
+public class ParagraphIndent {
+ private final Optional<String> start;
+ private final Optional<String> end;
+ private final Optional<String> firstLine;
+ private final Optional<String> hanging;
+
+ public ParagraphIndent(Optional<String> start, Optional<String> end, Optional<String> firstLine, Optional<String> hanging) {
+ this.start = start;
+ this.end = end;
+ this.firstLine = firstLine;
+ this.hanging = hanging;
+ }
+
+ public Optional<String> getStart() {
+ return start;
+ }
+
+ public Optional<String> getEnd() {
+ return end;
+ }
+
+ public Optional<String> getFirstLine() {
+ return firstLine;
+ }
+
+ public Optional<String> getHanging() {
+ return hanging;
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
index f6a9863..412ca23 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
@@ -245,10 +245,11 @@ class StatefulBodyXmlReader {
private ReadResult readParagraph(XmlElement element) {
XmlElementLike properties = element.findChildOrEmpty("w:pPr");
Optional<NumberingLevel> numbering = readNumbering(properties);
+ ParagraphIndent indent = readParagraphIndent(properties);
return ReadResult.map(
readParagraphStyle(properties),
readElements(element.getChildren()),
- (style, children) -> new Paragraph(style, numbering, children)).appendExtra();
+ (style, children) -> new Paragraph(style, numbering, indent, children)).appendExtra();
}
private ReadResult readFieldChar(XmlElement element) {
@@ -323,6 +324,22 @@ class StatefulBodyXmlReader {
numbering::findLevel);
}
+ private ParagraphIndent readParagraphIndent(XmlElementLike properties) {
+ XmlElementLike indent = properties.findChildOrEmpty("w:ind");
+ return new ParagraphIndent(
+ Optionals.first(
+ indent.getAttributeOrNone("w:start"),
+ indent.getAttributeOrNone("w:left")
+ ),
+ Optionals.first(
+ indent.getAttributeOrNone("w:end"),
+ indent.getAttributeOrNone("w:right")
+ ),
+ indent.getAttributeOrNone("w:firstLine"),
+ indent.getAttributeOrNone("w:hanging")
+ );
+ }
+
private ReadResult readBreak(XmlElement element) {
String breakType = element.getAttributeOrNone("w:type").orElse("textWrapping");
switch (breakType) {