diff options
Diffstat (limited to 'src/main/java/org')
6 files changed, 45 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java index 9e6d223..8b15106 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java @@ -166,6 +166,9 @@ public class DocumentToHtml { @Override public List<HtmlNode> visit(Run run, Context context) { Supplier<List<HtmlNode>> nodes = () -> convertChildrenToHtml(run, context); + if (run.isSmallCaps()) { + nodes = styleMap.getSmallCaps().orElse(HtmlPath.EMPTY).wrap(nodes); + } if (run.isStrikethrough()) { nodes = styleMap.getStrikethrough().orElse(HtmlPath.collapsibleElement("s")).wrap(nodes); } diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Run.java b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java index 29415c7..e047bf5 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Run.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java @@ -8,6 +8,7 @@ public class Run implements DocumentElement, HasChildren { private final boolean isItalic; private final boolean isUnderline; private final boolean isStrikethrough; + private final boolean isSmallCaps; private final VerticalAlignment verticalAlignment; private final Optional<Style> style; private final List<DocumentElement> children; @@ -17,14 +18,16 @@ public class Run implements DocumentElement, HasChildren { boolean isItalic, boolean isUnderline, boolean isStrikethrough, + boolean isSmallCaps, VerticalAlignment verticalAlignment, Optional<Style> style, - List<DocumentElement> children) - { + List<DocumentElement> children + ) { this.isBold = isBold; this.isItalic = isItalic; this.isUnderline = isUnderline; this.isStrikethrough = isStrikethrough; + this.isSmallCaps = isSmallCaps; this.verticalAlignment = verticalAlignment; this.style = style; this.children = children; @@ -46,6 +49,10 @@ public class Run implements DocumentElement, HasChildren { return isStrikethrough; } + public boolean isSmallCaps() { + return isSmallCaps; + } + public VerticalAlignment getVerticalAlignment() { return verticalAlignment; } 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 3d0d7f2..464884a 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -179,6 +179,7 @@ class StatefulBodyXmlReader { isItalic(properties), isUnderline(properties), isStrikethrough(properties), + isSmallCaps(properties), readVerticalAlignment(properties), style, children @@ -208,6 +209,10 @@ class StatefulBodyXmlReader { return readBooleanElement(properties, "w:strike"); } + private boolean isSmallCaps(XmlElementLike properties) { + return readBooleanElement(properties, "w:smallCaps"); + } + private boolean readBooleanElement(XmlElementLike properties, String tagName) { return properties.findChild(tagName) .map(child -> child.getAttributeOrNone("w:val") diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java index 9856d70..7959acb 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java @@ -23,6 +23,7 @@ public class StyleMap { Optionals.first(high.italic, low.italic), Optionals.first(high.underline, low.underline), Optionals.first(high.strikethrough, low.strikethrough), + Optionals.first(high.smallCaps, low.smallCaps), Optionals.first(high.commentReference, low.commentReference), Lists.eagerConcat(high.paragraphStyles, low.paragraphStyles), Lists.eagerConcat(high.runStyles, low.runStyles), @@ -36,6 +37,7 @@ public class StyleMap { private final Optional<HtmlPath> italic; private final Optional<HtmlPath> underline; private final Optional<HtmlPath> strikethrough; + private final Optional<HtmlPath> smallCaps; private final Optional<HtmlPath> commentReference; private final List<StyleMapping<Paragraph>> paragraphStyles; private final List<StyleMapping<Run>> runStyles; @@ -46,6 +48,7 @@ public class StyleMap { Optional<HtmlPath> italic, Optional<HtmlPath> underline, Optional<HtmlPath> strikethrough, + Optional<HtmlPath> smallCaps, Optional<HtmlPath> commentReference, List<StyleMapping<Paragraph>> paragraphStyles, List<StyleMapping<Run>> runStyles, @@ -56,6 +59,7 @@ public class StyleMap { this.italic = italic; this.underline = underline; this.strikethrough = strikethrough; + this.smallCaps = smallCaps; this.commentReference = commentReference; this.paragraphStyles = paragraphStyles; this.runStyles = runStyles; @@ -83,6 +87,10 @@ public class StyleMap { return strikethrough; } + public Optional<HtmlPath> getSmallCaps() { + return smallCaps; + } + public Optional<HtmlPath> getCommentReference() { return commentReference; } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java index 4972883..4e6e27b 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java @@ -11,6 +11,7 @@ import java.util.Optional; public class StyleMapBuilder { private Optional<HtmlPath> underline; private Optional<HtmlPath> strikethrough; + private Optional<HtmlPath> smallCaps; private Optional<HtmlPath> bold; private Optional<HtmlPath> italic; private Optional<HtmlPath> commentReference; @@ -22,6 +23,7 @@ public class StyleMapBuilder { this.bold = Optional.empty(); this.underline = Optional.empty(); this.strikethrough = Optional.empty(); + this.smallCaps = Optional.empty(); this.italic = Optional.empty(); this.commentReference = Optional.empty(); } @@ -46,6 +48,11 @@ public class StyleMapBuilder { return this; } + public StyleMapBuilder smallCaps(HtmlPath path) { + this.smallCaps = Optional.of(path); + return this; + } + public StyleMapBuilder commentReference(HtmlPath path) { this.commentReference = Optional.of(path); return this; @@ -67,6 +74,16 @@ public class StyleMapBuilder { } public StyleMap build() { - return new StyleMap(bold, italic, underline, strikethrough, commentReference, paragraphStyles, runStyles, breakStyles); + return new StyleMap( + bold, + italic, + underline, + strikethrough, + smallCaps, + commentReference, + paragraphStyles, + runStyles, + breakStyles + ); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java index db0b1bb..9f8d32b 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java @@ -27,6 +27,8 @@ public class DocumentMatcherParser { return StyleMapBuilder::underline; case "strike": return StyleMapBuilder::strikethrough; + case "small-caps": + return StyleMapBuilder::smallCaps; case "comment-reference": return StyleMapBuilder::commentReference; case "br": |
