src/docrecord.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/docstream.py | 8 +++++- 2 files changed, 72 insertions(+), 1 deletion(-)
New commits: commit c0510ac30c70de86d60a84a1c3f6d27f46c90ccb Author: Miklos Vajna <vmik...@suse.cz> Date: Thu Nov 8 11:11:56 2012 +0100 doc: show paragraph boundaries diff --git a/src/docrecord.py b/src/docrecord.py index 733c4ca..90fc1d2 100755 --- a/src/docrecord.py +++ b/src/docrecord.py @@ -74,6 +74,71 @@ class PlcPcd(DOCDirStream): print '</aCP>' print '</plcPcd>' +class PapxFkp(DOCDirStream): + """The PapxFkp structure maps paragraphs, table rows, and table cells to their properties.""" + def __init__(self, bytes, mainStream, offset, size): + DOCDirStream.__init__(self, mainStream.bytes) + self.pos = offset + self.size = size + + def dump(self): + print '<papxFkp type="PapxFkp" offset="%d" size="%d bytes">' % (self.pos, self.size) + self.cpara = ord(struct.unpack("<c", self.bytes[self.pos+self.size-1:self.pos+self.size-1+1])[0]) + pos = self.pos + for i in range(self.cpara): + # aFC + start = struct.unpack("<I", self.bytes[pos:pos+4])[0] + end = struct.unpack("<I", self.bytes[pos+4:pos+8])[0] + print '<rgfc index="%d" start="%d" end="%d">' % (i, start, end) + print '<transformed value="%s"/>' % globals.encodeName(self.bytes[start:end]) + print '</rgfc>' + pos += 4 + + self.printAndSet("cpara", self.cpara) + print '</papxFkp>' + +class PnFkpPapx(DOCDirStream): + """The PnFkpPapx structure specifies the offset of a PapxFkp in the WordDocument Stream.""" + def __init__(self, bytes, mainStream, offset, size, name): + DOCDirStream.__init__(self, bytes, mainStream=mainStream) + self.pos = offset + self.size = size + self.name = name + + def dump(self): + print '<%s type="PnFkpPapx" offset="%d" size="%d bytes">' % (self.name, self.pos, self.size) + buf = struct.unpack("<I", self.bytes[self.pos:self.pos+4])[0] + self.pos += 4 + self.printAndSet("pn", buf & (2**22-1)) + papxFkp = PapxFkp(self.bytes, self.mainStream, self.pn*512, 512) + papxFkp.dump() + print '</%s>' % self.name + +class PlcBtePapx(DOCDirStream): + """The PlcBtePapx structure is a PLC that specifies paragraph, table row, or table cell properties.""" + def __init__(self, bytes, mainStream, offset, size): + DOCDirStream.__init__(self, bytes, mainStream=mainStream) + self.pos = offset + self.size = size + + def dump(self): + print '<plcBtePapx type="PlcBtePapx" offset="%d" size="%d bytes">' % (self.pos, self.size) + elements = (self.size - 4) / (4 + 4) # TODO dedicated PLC class + pos = self.pos + for i in range(elements): + # aFC + start = struct.unpack("<I", self.bytes[pos:pos+4])[0] + end = struct.unpack("<I", self.bytes[pos+4:pos+8])[0] + print '<aFC index="%d" start="%d" end="%d">' % (i, start, end) + pos += 4 + + # aPnBtePapx + offset = self.pos + ( 4 * ( elements + 1 ) ) + ( 4 * i ) + aPnBtePapx = PnFkpPapx(self.bytes, self.mainStream, offset, 4, "aPnBtePapx") + aPnBtePapx.dump() + print '</aFC>' + print '</plcBtePapx>' + class Pcdt(DOCDirStream): """The Pcdt structure contains a PlcPcd structure and specifies its size.""" def __init__(self, bytes, mainStream, offset, size): diff --git a/src/docstream.py b/src/docstream.py index f14dba5..338232d 100755 --- a/src/docstream.py +++ b/src/docstream.py @@ -214,7 +214,7 @@ class WordDocumentStream(DOCDirStream): ["fcPlcfBteChpx"], ["lcbPlcfBteChpx"], ["fcPlcfBtePapx"], - ["lcbPlcfBtePapx"], + ["lcbPlcfBtePapx", self.handleLcbPlcfBtePapx], ["fcPlcfSea"], ["lcbPlcfSea"], ["fcSttbfFfn"], @@ -387,6 +387,12 @@ class WordDocumentStream(DOCDirStream): clx = docrecord.Clx(self.doc.getDirectoryStreamByName("1Table").bytes, self, offset, size) clx.dump() + def handleLcbPlcfBtePapx(self): + offset = self.fcPlcfBtePapx + size = self.lcbPlcfBtePapx + plcBtePapx = docrecord.PlcBtePapx(self.doc.getDirectoryStreamByName("1Table").bytes, self, offset, size) + plcBtePapx.dump() + def dumpFibRgFcLcb97(self, name): print '<%s type="FibRgFcLcb97" size="744 bytes">' % name self.__dumpFibRgFcLcb97() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits