From 063e74acf62673d494eb458dbe02da82db341d20 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sun, 24 May 2015 01:10:12 +0000 Subject: [PATCH] Fixed some style related corner cases and adapted the tests for it git-svn-id: https://svn.apache.org/repos/asf/poi/branches/common_sl@1681411 13f79535-47bb-0310-9956-ffa450edef68 --- .../model/textproperties/BitMaskTextProp.java | 73 +++++++++++++++++-- .../textproperties/CharFlagsTextProp.java | 35 +++++---- .../ParagraphFlagsTextProp.java | 10 +-- .../textproperties/TextPropCollection.java | 19 +++-- .../textproperties/WrapFlagsTextProp.java | 30 ++++++++ .../poi/hslf/record/StyleTextPropAtom.java | 4 - .../poi/hslf/usermodel/HSLFSlideShow.java | 8 +- .../poi/hslf/usermodel/HSLFTextRun.java | 4 +- .../hslf/record/TestStyleTextPropAtom.java | 69 +++++++++++++----- 9 files changed, 185 insertions(+), 67 deletions(-) create mode 100644 src/scratchpad/src/org/apache/poi/hslf/model/textproperties/WrapFlagsTextProp.java diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/BitMaskTextProp.java b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/BitMaskTextProp.java index 15fdc1991..c76b05cd2 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/BitMaskTextProp.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/BitMaskTextProp.java @@ -17,6 +17,10 @@ package org.apache.poi.hslf.model.textproperties; +import org.apache.poi.hslf.record.Record; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; + /** * Definition of a special kind of property of some text, or its * paragraph. For these properties, a flag in the "contains" header @@ -25,7 +29,9 @@ package org.apache.poi.hslf.model.textproperties; * (but related) properties */ public abstract class BitMaskTextProp extends TextProp implements Cloneable { - private String[] subPropNames; + protected static final POILogger logger = POILogFactory.getLogger(BitMaskTextProp.class); + + private String[] subPropNames; private int[] subPropMasks; private boolean[] subPropMatches; @@ -34,22 +40,25 @@ public abstract class BitMaskTextProp extends TextProp implements Cloneable { /** Fetch the list of if the sub properties match or not */ public boolean[] getSubPropMatches() { return subPropMatches; } - public BitMaskTextProp(int sizeOfDataBlock, int maskInHeader, String overallName, String[] subPropNames) { + protected BitMaskTextProp(int sizeOfDataBlock, int maskInHeader, String overallName, String... subPropNames) { super(sizeOfDataBlock,maskInHeader,"bitmask"); this.subPropNames = subPropNames; this.propName = overallName; subPropMasks = new int[subPropNames.length]; subPropMatches = new boolean[subPropNames.length]; + int LSB = Integer.lowestOneBit(maskInHeader); + // Initialise the masks list for(int i=0; i */ + @Test public void test45815() { int length = 19; byte[] data = { @@ -750,7 +779,13 @@ public final class TestStyleTextPropAtom extends TestCase { 0x01, 0x18, 0x01, 0x00, 0x00, 0x00, 0x01, 0x1C, 0x00, 0x00, 0x01, 0x1C }; - doReadWrite(data, length); + + // changed original data: ... 0x41 and 0x06 don't match + // the bitmask text properties will sanitize the bytes and thus the bytes differ + byte[] exptected = data.clone(); + exptected[18] = 0; + + doReadWrite(data, exptected, length); } }