Skip to content

Commit

Permalink
Handle the fact that StyleTextPropAtom needs to work with a text leng…
Browse files Browse the repository at this point in the history
…th that's one larger than the underlying text it represents. (Fix from Yegor from bug #40143)

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@495278 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Gagravarr committed Jan 11, 2007
1 parent e7c94a1 commit ff12442
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
Expand Up @@ -417,7 +417,7 @@ public synchronized void ensureStyleAtomPresent() {
}

// 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();
Expand Down
Expand Up @@ -228,7 +228,8 @@ public void setParentTextSize(int size) {

// 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;
Expand All @@ -250,11 +251,21 @@ public void setParentTextSize(int size) {

// 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;
Expand All @@ -279,9 +290,12 @@ public void setParentTextSize(int size) {

// 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) {
Expand Down
Expand Up @@ -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:
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit ff12442

Please sign in to comment.