]> source.dussan.org Git - poi.git/commitdiff
Handle the fact that StyleTextPropAtom needs to work with a text length that's one...
authorNick Burch <nick@apache.org>
Thu, 11 Jan 2007 16:18:30 +0000 (16:18 +0000)
committerNick Burch <nick@apache.org>
Thu, 11 Jan 2007 16:18:30 +0000 (16:18 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@495278 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java

index 4a1d4c8a0ec887185707bcd9db2c6d471d6f2fee..c12e791a2e3cd78476624d51baf307e2b6c7590e 100644 (file)
@@ -417,7 +417,7 @@ public class TextRun
                }
                
                // Create a new one at the right size
-               _styleAtom = new StyleTextPropAtom(getRawText().length());
+               _styleAtom = new StyleTextPropAtom(getRawText().length() + 1);
                
                // Use the TextHeader atom to get at the parent
                RecordContainer runAtomsParent = _headerAtom.getParentRecord();
index f891bc159a360307eceaf01604afe2c980cd15dc..2223a7ee03a05f55ab3294c308649f2c0f9a604d 100644 (file)
@@ -228,7 +228,8 @@ public class StyleTextPropAtom extends RecordAtom
 
                // While we have text in need of paragraph stylings, go ahead and
                // grok the contents as paragraph formatting data
-               while(pos < rawContents.length && textHandled < size) {
+        int prsize = size;
+               while(pos < rawContents.length && textHandled < prsize) {
                        // First up, fetch the number of characters this applies to
                        int textLen = LittleEndian.getInt(rawContents,pos);
                        textHandled += textLen;
@@ -250,11 +251,21 @@ public class StyleTextPropAtom extends RecordAtom
 
                        // Save this properties set
                        paragraphStyles.add(thisCollection);
+
+            // Handle extra 1 paragraph styles at the end
+            if(pos < rawContents.length && textHandled == size) {
+                prsize++;
+            }
+
                }
+        if (rawContents.length > 0 && textHandled != (size+1)){
+            System.err.println("Problem reading paragraph style runs: textHandled = " + textHandled + ", text.size+1 = " + (size+1));
+        }
 
                // Now do the character stylings
                textHandled = 0;
-               while(pos < rawContents.length && textHandled < size) {
+        int chsize = size;
+               while(pos < rawContents.length && textHandled < chsize) {
                        // First up, fetch the number of characters this applies to
                        int textLen = LittleEndian.getInt(rawContents,pos);
                        textHandled += textLen;
@@ -279,9 +290,12 @@ public class StyleTextPropAtom extends RecordAtom
                        
                        // Handle extra 1 char styles at the end
                        if(pos < rawContents.length && textHandled == size) {
-                               size++;
+                               chsize++;
                        }
                }
+        if (rawContents.length > 0 && textHandled != (size+1)){
+            System.err.println("Problem reading character style runs: textHandled = " + textHandled + ", text.size+1 = " + (size+1));
+        }
 
                // Handle anything left over
                if(pos < rawContents.length) {
index 1faae21d8ee2af8545c57173fa07f466d2bdf728..674da9d17525cf15c72421ec70cc394c022a22b4 100644 (file)
@@ -49,7 +49,7 @@ public class TestStyleTextPropAtom extends TestCase {
       00, 00, 0x04, 00, // font.color only
       0xFF-256, 0x33, 00, 0xFE-256 // red
        };
-       private int data_a_text_len = 54;
+       private int data_a_text_len = 0x36-1;
 
        /** 
         * From a real file: 4 paragraphs with text in 4 different styles:
@@ -125,7 +125,7 @@ public class TestStyleTextPropAtom extends TestCase {
                28, 0, 1, 0, 0, 0, 0, 0, 
                3, 0, 1, 0, 24, 0
        };
-       private int data_c_text_len = 123;
+       private int data_c_text_len = 123-1;
 
        
     public void testRecordType() throws Exception {