Pass font details + character styling up to the model

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353787 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2005-09-17 16:44:00 +00:00
parent a5d4a16967
commit aa0705ea2e
5 changed files with 35 additions and 8 deletions

View File

@ -29,6 +29,7 @@ import org.apache.poi.poifs.filesystem.DocumentInputStream;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.record.StyleTextPropAtom;
import org.apache.poi.hslf.record.TextHeaderAtom;
import org.apache.poi.hslf.record.TextBytesAtom;
import org.apache.poi.hslf.record.TextCharsAtom;
@ -182,12 +183,12 @@ public class QuickButCruddyTextExtractor
// TextBytesAtom
if(type == 4008l) {
TextBytesAtom tba = (TextBytesAtom)Record.createRecordForType(type, pptContents, startPos, len+8);
trun = new TextRun((TextHeaderAtom)null,tba);
trun = new TextRun((TextHeaderAtom)null,tba,(StyleTextPropAtom)null);
}
// TextCharsAtom
if(type == 4000l) {
TextCharsAtom tca = (TextCharsAtom)Record.createRecordForType(type, pptContents, startPos, len+8);
trun = new TextRun((TextHeaderAtom)null,tca);
trun = new TextRun((TextHeaderAtom)null,tca,(StyleTextPropAtom)null);
}
// If we found text, save it in the vector

View File

@ -71,12 +71,22 @@ public abstract class Sheet
if(records[i] instanceof TextHeaderAtom) {
TextRun trun = null;
TextHeaderAtom tha = (TextHeaderAtom)records[i];
StyleTextPropAtom stpa = null;
// Look for a subsequent StyleTextPropAtom
if(i < (records.length-2)) {
if(records[i+2] instanceof StyleTextPropAtom) {
stpa = (StyleTextPropAtom)records[i+2];
}
}
// See what follows the TextHeaderAtom
if(records[i+1] instanceof TextCharsAtom) {
TextCharsAtom tca = (TextCharsAtom)records[i+1];
trun = new TextRun(tha,tca);
trun = new TextRun(tha,tca,stpa);
} else if(records[i+1] instanceof TextBytesAtom) {
TextBytesAtom tba = (TextBytesAtom)records[i+1];
trun = new TextRun(tha,tba);
trun = new TextRun(tha,tba,stpa);
} else if(records[i+1].getRecordType() == 4001l) {
// StyleTextPropAtom - Safe to ignore
} else if(records[i+1].getRecordType() == 4010l) {

View File

@ -35,6 +35,7 @@ public class TextRun
private TextHeaderAtom _headerAtom;
private TextBytesAtom _byteAtom;
private TextCharsAtom _charAtom;
private StyleTextPropAtom _styleAtom;
private boolean _isUnicode;
/**
@ -43,9 +44,10 @@ public class TextRun
* @param tha the TextHeaderAtom that defines what's what
* @param tca the TextCharsAtom containing the text
*/
public TextRun(TextHeaderAtom tha, TextCharsAtom tca) {
public TextRun(TextHeaderAtom tha, TextCharsAtom tca, StyleTextPropAtom sta) {
_headerAtom = tha;
_charAtom = tca;
_styleAtom = sta;
_isUnicode = true;
}
@ -55,9 +57,10 @@ public class TextRun
* @param tha the TextHeaderAtom that defines what's what
* @param tba the TextBytesAtom containing the text
*/
public TextRun(TextHeaderAtom tha, TextBytesAtom tba) {
public TextRun(TextHeaderAtom tha, TextBytesAtom tba, StyleTextPropAtom sta) {
_headerAtom = tha;
_byteAtom = tba;
_styleAtom = sta;
_isUnicode = false;
}

View File

@ -41,7 +41,7 @@ public class RecordTypes {
public static final Type SlideAtom = new Type(1007,SlideAtom.class);
public static final Type Notes = new Type(1008,Notes.class);
public static final Type NotesAtom = new Type(1009,NotesAtom.class);
public static final Type Environment = new Type(1010,null);
public static final Type Environment = new Type(1010,DummyRecordWithChildren.class);
public static final Type SlidePersistAtom = new Type(1011,SlidePersistAtom.class);
public static final Type SSlideLayoutAtom = new Type(1015,null);
public static final Type MainMaster = new Type(1016,DummyPositionSensitiveRecordWithChildren.class);

View File

@ -26,7 +26,9 @@ import org.apache.poi.util.LittleEndian;
import org.apache.poi.hslf.*;
import org.apache.poi.hslf.model.*;
import org.apache.poi.hslf.record.FontCollection;
import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.record.RecordTypes;
import org.apache.poi.hslf.record.SlideAtom;
import org.apache.poi.hslf.record.SlideListWithText;
import org.apache.poi.hslf.record.SlideListWithText.*;
@ -59,6 +61,7 @@ public class SlideShow
// Friendly objects for people to deal with
private Slide[] _slides;
private Notes[] _notes;
private FontCollection _fonts;
// MetaSheets (eg masters) not yet supported
// private MetaSheets[] _msheets;
@ -183,7 +186,7 @@ public class SlideShow
if(_mostRecentCoreRecords[i] instanceof org.apache.poi.hslf.record.Slide) {
slidesV.add(_mostRecentCoreRecords[i]);
}
if(_records[i].getRecordType() == 1000l) {
if(_records[i].getRecordType() == RecordTypes.Document.typeID) {
documentRecord = _mostRecentCoreRecords[i];
}
}
@ -210,9 +213,19 @@ public class SlideShow
Record[] docChildren = documentRecord.getChildRecords();
for(int i=0; i<docChildren.length; i++) {
// Look for SlideListWithText
if(docChildren[i] instanceof SlideListWithText) {
slwtV.add(docChildren[i]);
}
// Look for FontCollection under Environment
if(docChildren[i].getRecordType() == RecordTypes.Environment.typeID) {
Record[] envChildren = docChildren[i].getChildRecords();
for(int j=0; j<envChildren.length; j++) {
if(envChildren[j] instanceof FontCollection) {
_fonts = (FontCollection)envChildren[j];
}
}
}
}
// For now, grab out all the sets of Atoms in the SlideListWithText's