diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-08-03 08:05:02 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-08-03 08:05:02 +0100 |
| commit | b65bc063d98c2ddb1dc4cc9b4dbcdc1aef23d5aa (patch) | |
| tree | b672568a0f04e95749abdc9475f3bb026760ba64 /src/main/java/org/zwobble/mammoth/internal | |
| parent | dd25b828a490ddad7ccc75d762b82d5fdd689fcd (diff) | |
Ignore style definitions using a style ID that has already been used
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java | 7 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/util/Maps.java | 16 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java index 656b0dd..31d55b7 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StylesXml.java @@ -9,8 +9,7 @@ import java.util.Map; import java.util.Optional; import static org.zwobble.mammoth.internal.util.Iterables.lazyFilter; -import static org.zwobble.mammoth.internal.util.Maps.entry; -import static org.zwobble.mammoth.internal.util.Maps.toMap; +import static org.zwobble.mammoth.internal.util.Maps.*; public class StylesXml { public static Styles readStylesXmlElement(XmlElement element) { @@ -24,7 +23,7 @@ public class StylesXml { } private static Map<String, Style> readStyles(XmlElementList styleElements, String styleType) { - return toMap( + return toMapPreferFirst( styleElementsOfType(styleElements, styleType), StylesXml::readStyle ); @@ -37,7 +36,7 @@ public class StylesXml { } private static Map<String, NumberingStyle> readNumberingStyles(XmlElementList styleElements) { - return toMap( + return toMapPreferFirst( styleElementsOfType(styleElements, "numbering"), StylesXml::readNumberingStyle ); diff --git a/src/main/java/org/zwobble/mammoth/internal/util/Maps.java b/src/main/java/org/zwobble/mammoth/internal/util/Maps.java index e053c90..72d9fd5 100644 --- a/src/main/java/org/zwobble/mammoth/internal/util/Maps.java +++ b/src/main/java/org/zwobble/mammoth/internal/util/Maps.java @@ -63,6 +63,22 @@ public class Maps { return map; } + /** + * Convert an iterable to map using the given mapping function. If the + * mapping function generates entries with the same key, only the first + * entry will be used, and subsequent entries will be ignored. + */ + public static <T, K, V> Map<K, V> toMapPreferFirst(Iterable<T> iterable, Function<T, Map.Entry<K, V>> function) { + Map<K, V> map = new HashMap<>(); + for (T element : iterable) { + Map.Entry<K, V> entry = function.apply(element); + if (!map.containsKey(entry.getKey())) { + map.put(entry.getKey(), entry.getValue()); + } + } + return map; + } + public static <T, K> Map<K, List<T>> toMultiMapWithKey(Iterable<T> iterable, Function<T, K> function) { return toMultiMap(iterable, element -> entry(function.apply(element), element)); } |
