src/docrecord.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/docstream.py | 16 +++++++- 2 files changed, 113 insertions(+), 2 deletions(-)
New commits: commit c5eb2a70373ec6400dfc6314c6bf7bafbe1f97de Author: Miklos Vajna <[email protected]> Date: Wed Nov 21 14:34:51 2012 +0100 dump PlcfBkl diff --git a/src/docrecord.py b/src/docrecord.py index 7a01627..cecdef4 100755 --- a/src/docrecord.py +++ b/src/docrecord.py @@ -101,7 +101,7 @@ class FBKF(DOCDirStream): self.pos += 2 print '</aFBKF>' -class PlcfAtnBkf(DOCDirStream, PLC): +class PlcfBkf(DOCDirStream, PLC): """A PLCFBKF is a PLC whose data elements are FBKF structures.""" def __init__(self, mainStream, offset, size): DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes, mainStream = mainStream) @@ -110,7 +110,7 @@ class PlcfAtnBkf(DOCDirStream, PLC): self.size = size def dump(self): - print '<plcfAtnBkf type="PlcfAtnBkf" offset="%d" size="%d bytes">' % (self.pos, self.size) + print '<plcfBkf type="PlcfAtnBkf" offset="%d" size="%d bytes">' % (self.pos, self.size) offset = self.mainStream.fcMin pos = self.pos for i in range(self.getElements()): @@ -124,7 +124,53 @@ class PlcfAtnBkf(DOCDirStream, PLC): aFBKF = FBKF(self, self.getOffset(self.pos, i)) aFBKF.dump() print '</aCP>' - print '</plcfAtnBkf>' + print '</plcfBkf>' + +class PlcfBkf(DOCDirStream, PLC): + """A PLCFBKF is a PLC whose data elements are FBKF structures.""" + def __init__(self, mainStream, offset, size): + DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes, mainStream = mainStream) + PLC.__init__(self, size, 4) # 4 is defined by 2.8.10 + self.pos = offset + self.size = size + + def dump(self): + print '<plcfBkf type="PlcfBkf" offset="%d" size="%d bytes">' % (self.pos, self.size) + offset = self.mainStream.fcMin + pos = self.pos + for i in range(self.getElements()): + # aCp + start = offset + self.getuInt32(pos = pos) + print '<aCP index="%d" bookmarkStart="%d">' % (i, start) + print '<transformed value="%s"/>' % FcCompressed.getFCTransformedValue(self.mainStream.bytes, start, start + 1) + pos += 4 + + # aFBKF + aFBKF = FBKF(self, self.getOffset(self.pos, i)) + aFBKF.dump() + print '</aCP>' + print '</plcfBkf>' + +class PlcfBkl(DOCDirStream, PLC): + """The Plcfbkl structure is a PLC that contains only CPs and no additional data.""" + def __init__(self, mainStream, offset, size): + DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes, mainStream = mainStream) + PLC.__init__(self, size, 0) # 0 is defined by 2.8.12 + self.pos = offset + self.size = size + + def dump(self): + print '<plcfBkl type="PlcfBkl" offset="%d" size="%d bytes">' % (self.pos, self.size) + offset = self.mainStream.fcMin + pos = self.pos + for i in range(self.getElements()): + # aCp + end = offset + self.getuInt32(pos = pos) + print '<aCP index="%d" bookmarkEnd="%d">' % (i, end) + print '<transformed value="%s"/>' % FcCompressed.getFCTransformedValue(self.mainStream.bytes, end, end + 1) + pos += 4 + print '</aCP>' + print '</plcfBkl>' class PlcPcd(DOCDirStream, PLC): """The PlcPcd structure is a PLC whose data elements are Pcds (8 bytes each).""" diff --git a/src/docstream.py b/src/docstream.py index 98cc8e2..d9a539d 100755 --- a/src/docstream.py +++ b/src/docstream.py @@ -275,7 +275,7 @@ class WordDocumentStream(DOCDirStream): ["fcPlcfAtnBkf"], ["lcbPlcfAtnBkf", self.handleLcbPlcfAtnBkf], ["fcPlcfAtnBkl"], - ["lcbPlcfAtnBkl"], + ["lcbPlcfAtnBkl", self.handleLcbPlcfAtnBkl], ["fcPms"], ["lcbPms"], ["fcFormFldSttbs"], @@ -433,8 +433,14 @@ class WordDocumentStream(DOCDirStream): def handleLcbPlcfAtnBkf(self): offset = self.fcPlcfAtnBkf size = self.lcbPlcfAtnBkf - plcfAtnBkf = docrecord.PlcfAtnBkf(self, offset, size) - plcfAtnBkf.dump() + plcfBkf = docrecord.PlcfBkf(self, offset, size) + plcfBkf.dump() + + def handleLcbPlcfAtnBkl(self): + offset = self.fcPlcfAtnBkl + size = self.lcbPlcfAtnBkl + plcfBkl = docrecord.PlcfBkl(self, offset, size) + plcfBkl.dump() def dumpFibRgFcLcb97(self, name): print '<%s type="FibRgFcLcb97" size="744 bytes">' % name commit 74d77409cdcbd7f96325efffeea774c42c89e11b Author: Miklos Vajna <[email protected]> Date: Wed Nov 21 14:22:17 2012 +0100 dump PlcfAtnBkf diff --git a/src/docrecord.py b/src/docrecord.py index 7378068..7a01627 100755 --- a/src/docrecord.py +++ b/src/docrecord.py @@ -73,6 +73,59 @@ class PLC: def getPLCOffset(pos, elements, structSize, i): return pos + (4 * (elements + 1)) + (structSize * i) +class BKC(DOCDirStream): + """The BKC structure contains information about how a bookmark interacts with tables.""" + def __init__(self, bkc): + self.bkc = bkc + + def dump(self): + print '<bkc type="BKC">' + self.printAndSet("itcFirst", self.bkc & 0x007f) # 1..7th bits + self.printAndSet("fPub", self.getBit(self.bkc, 8)) + self.printAndSet("itcLim", (self.bkc & 0x3f00) >> 8) # 9..14th bits + self.printAndSet("fNative", self.getBit(self.bkc, 15)) + self.printAndSet("fCol", self.getBit(self.bkc, 16)) + print '</bkc>' + +class FBKF(DOCDirStream): + """The FBKF structure contains information about a bookmark.""" + def __init__(self, plcfAtnBkf, offset): + DOCDirStream.__init__(self, plcfAtnBkf.bytes) + self.pos = offset + + def dump(self): + print '<aFBKF type="FBKF" offset="%d">' % self.pos + self.printAndSet("ibkl", self.getuInt16()) + self.pos += 2 + BKC(self.getuInt16()).dump() + self.pos += 2 + print '</aFBKF>' + +class PlcfAtnBkf(DOCDirStream, PLC): + """A PLCFBKF is a PLC whose data elements are FBKF structures.""" + def __init__(self, mainStream, offset, size): + DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes, mainStream = mainStream) + PLC.__init__(self, size, 4) # 4 is defined by 2.8.10 + self.pos = offset + self.size = size + + def dump(self): + print '<plcfAtnBkf type="PlcfAtnBkf" offset="%d" size="%d bytes">' % (self.pos, self.size) + offset = self.mainStream.fcMin + pos = self.pos + for i in range(self.getElements()): + # aCp + start = offset + self.getuInt32(pos = pos) + print '<aCP index="%d" bookmarkStart="%d">' % (i, start) + print '<transformed value="%s"/>' % FcCompressed.getFCTransformedValue(self.mainStream.bytes, start, start + 1) + pos += 4 + + # aFBKF + aFBKF = FBKF(self, self.getOffset(self.pos, i)) + aFBKF.dump() + print '</aCP>' + print '</plcfAtnBkf>' + class PlcPcd(DOCDirStream, PLC): """The PlcPcd structure is a PLC whose data elements are Pcds (8 bytes each).""" def __init__(self, bytes, mainStream, offset, size): diff --git a/src/docstream.py b/src/docstream.py index 91644dd..98cc8e2 100755 --- a/src/docstream.py +++ b/src/docstream.py @@ -273,7 +273,7 @@ class WordDocumentStream(DOCDirStream): ["fcPlcSpaHdr"], ["lcbPlcSpaHdr"], ["fcPlcfAtnBkf"], - ["lcbPlcfAtnBkf"], + ["lcbPlcfAtnBkf", self.handleLcbPlcfAtnBkf], ["fcPlcfAtnBkl"], ["lcbPlcfAtnBkl"], ["fcPms"], @@ -430,6 +430,12 @@ class WordDocumentStream(DOCDirStream): sttbfAtnBkmk = docrecord.SttbfAtnBkmk(self, offset, size) sttbfAtnBkmk.dump() + def handleLcbPlcfAtnBkf(self): + offset = self.fcPlcfAtnBkf + size = self.lcbPlcfAtnBkf + plcfAtnBkf = docrecord.PlcfAtnBkf(self, offset, size) + plcfAtnBkf.dump() + def dumpFibRgFcLcb97(self, name): print '<%s type="FibRgFcLcb97" size="744 bytes">' % name self.__dumpFibRgFcLcb97() _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
