package org.zwobble.mammoth.internal.styles; import com.google.common.collect.Iterables; import org.zwobble.mammoth.internal.documents.Paragraph; import org.zwobble.mammoth.internal.documents.Run; import org.zwobble.mammoth.internal.util.MammothLists; import org.zwobble.mammoth.internal.util.MammothOptionals; import java.util.List; import java.util.Optional; public class StyleMap { public static StyleMapBuilder builder() { return new StyleMapBuilder(); } public static final StyleMap EMPTY = new StyleMapBuilder().build(); private final Optional bold; private final Optional italic; private final Optional underline; private final Optional strikethrough; private final List> paragraphStyles; private final List> runStyles; public StyleMap( Optional bold, Optional italic, Optional underline, Optional strikethrough, List> paragraphStyles, List> runStyles) { this.bold = bold; this.italic = italic; this.underline = underline; this.strikethrough = strikethrough; this.paragraphStyles = paragraphStyles; this.runStyles = runStyles; } public StyleMap update(StyleMap styleMap) { // TODO: add appropriate tests return new StyleMap( MammothOptionals.first(styleMap.bold, bold), MammothOptionals.first(styleMap.italic, italic), MammothOptionals.first(styleMap.underline, underline), MammothOptionals.first(styleMap.strikethrough, strikethrough), MammothLists.concat(styleMap.paragraphStyles, paragraphStyles), MammothLists.concat(styleMap.runStyles, runStyles)); } public Optional getBold() { return bold; } public Optional getItalic() { return italic; } public Optional getUnderline() { return underline; } public Optional getStrikethrough() { return strikethrough; } public Optional getParagraphHtmlPath(Paragraph paragraph) { com.google.common.base.Optional> mapping = Iterables.tryFind( paragraphStyles, styleMapping -> styleMapping.matches(paragraph)); return Optional.ofNullable(mapping.orNull()) .map(StyleMapping::getHtmlPath); } public Optional getRunHtmlPath(Run run) { com.google.common.base.Optional> mapping = Iterables.tryFind( runStyles, styleMapping -> styleMapping.matches(run)); return Optional.ofNullable(mapping.orNull()) .map(StyleMapping::getHtmlPath); } }