src/docdraw.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 10 deletions(-)
New commits: commit 0675409678a7719f29f0f20695f91c0a1d7e6c67 Author: Miklos Vajna <[email protected]> Date: Mon Dec 3 17:28:08 2012 +0100 dump OfficeArtFSP diff --git a/src/docdraw.py b/src/docdraw.py index 97915d3..26b4ccf 100644 --- a/src/docdraw.py +++ b/src/docdraw.py @@ -139,10 +139,6 @@ class OfficeArtDggContainer(DOCDirStream): self.rh = OfficeArtRecordHeader(self, "rh") self.rh.dump() pos = self.pos - recMap = { - 0xf006: OfficeArtFDGGBlock, - 0xf11e: OfficeArtSplitMenuColorContainer, - } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) rh.parse() @@ -189,6 +185,38 @@ class OfficeArtFSPGR(DOCDirStream): print '</shapeGroup>' assert self.pos == pos + rh.recLen +class OfficeArtFSP(DOCDirStream): + """The OfficeArtFSP record specifies an instance of a shape.""" + def __init__(self, officeArtSpContainer, pos): + DOCDirStream.__init__(self, officeArtSpContainer.bytes) + self.pos = pos + self.officeArtSpContainer = officeArtSpContainer + + def dump(self): + print '<shapeProp type="OfficeArtFSP" offset="%d">' % (self.pos) + rh = OfficeArtRecordHeader(self, "rh") + rh.dump() + pos = self.pos + self.printAndSet("spid", self.readuInt32()) + + buf = self.readuInt32() + self.printAndSet("fGroup", self.getBit(buf, 0)) + self.printAndSet("fChild", self.getBit(buf, 1)) + self.printAndSet("fPatriarch", self.getBit(buf, 2)) + self.printAndSet("fDeleted", self.getBit(buf, 3)) + self.printAndSet("fOleShape", self.getBit(buf, 4)) + self.printAndSet("fHaveMaster", self.getBit(buf, 5)) + self.printAndSet("fFlipH", self.getBit(buf, 6)) + self.printAndSet("fFlipV", self.getBit(buf, 7)) + self.printAndSet("fConnector", self.getBit(buf, 8)) + self.printAndSet("fHaveAnchor", self.getBit(buf, 9)) + self.printAndSet("fBackground", self.getBit(buf, 10)) + self.printAndSet("fHaveSpt", self.getBit(buf, 11)) + self.printAndSet("unused1", (buf & 0xfffff000) >> 12) # 13..32th bits + + print '</shapeProp>' + assert self.pos == pos + rh.recLen + class OfficeArtSpContainer(DOCDirStream): """The OfficeArtSpContainer record specifies a shape container.""" def __init__(self, parent, pos): @@ -201,9 +229,6 @@ class OfficeArtSpContainer(DOCDirStream): self.rh = OfficeArtRecordHeader(self, "rh") self.rh.dump() pos = self.pos - recMap = { - 0xf009: OfficeArtFSPGR, - } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) rh.parse() @@ -230,9 +255,6 @@ class OfficeArtSpgrContainer(DOCDirStream): self.rh = OfficeArtRecordHeader(self, "rh") self.rh.dump() pos = self.pos - recMap = { - 0xf004: OfficeArtSpContainer - } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) rh.parse() @@ -260,10 +282,6 @@ class OfficeArtDgContainer(DOCDirStream): self.rh = OfficeArtRecordHeader(self, "rh") self.rh.dump() pos = self.pos - recMap = { - 0xf003: OfficeArtSpgrContainer, - 0xf008: OfficeArtFDG, - } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) rh.parse() @@ -278,4 +296,14 @@ class OfficeArtDgContainer(DOCDirStream): assert pos == self.pos + self.rh.recLen self.officeArtContent.pos = pos +recMap = { + 0xf003: OfficeArtSpgrContainer, + 0xf004: OfficeArtSpContainer, + 0xf006: OfficeArtFDGGBlock, + 0xf008: OfficeArtFDG, + 0xf009: OfficeArtFSPGR, + 0xf00a: OfficeArtFSP, + 0xf11e: OfficeArtSplitMenuColorContainer, + } + # vim:set filetype=python shiftwidth=4 softtabstop=4 expandtab: commit 96e8783692368658b4b2f3b2b1f6bda448cdc456 Author: Miklos Vajna <[email protected]> Date: Mon Dec 3 17:17:47 2012 +0100 dump OfficeArtFSPGR diff --git a/src/docdraw.py b/src/docdraw.py index 49721c2..97915d3 100644 --- a/src/docdraw.py +++ b/src/docdraw.py @@ -170,6 +170,25 @@ class OfficeArtFDG(DOCDirStream): self.printAndSet("spidCur", self.readuInt32()) print '</drawingData>' +class OfficeArtFSPGR(DOCDirStream): + """The OfficeArtFSPGR record specifies the coordinate system of the group shape that the anchors of the child shape are expressed in.""" + def __init__(self, officeArtSpContainer, pos): + DOCDirStream.__init__(self, officeArtSpContainer.bytes) + self.pos = pos + self.officeArtSpContainer = officeArtSpContainer + + def dump(self): + print '<shapeGroup type="OfficeArtFSPGR" offset="%d">' % (self.pos) + rh = OfficeArtRecordHeader(self, "rh") + rh.dump() + pos = self.pos + self.printAndSet("xLeft", self.readuInt32()) + self.printAndSet("yTop", self.readuInt32()) + self.printAndSet("xRight", self.readuInt32()) + self.printAndSet("yBottom", self.readuInt32()) + print '</shapeGroup>' + assert self.pos == pos + rh.recLen + class OfficeArtSpContainer(DOCDirStream): """The OfficeArtSpContainer record specifies a shape container.""" def __init__(self, parent, pos): @@ -183,6 +202,7 @@ class OfficeArtSpContainer(DOCDirStream): self.rh.dump() pos = self.pos recMap = { + 0xf009: OfficeArtFSPGR, } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) commit ef77e73eed3ae9c233da4c04bb214e0dd9fa5b61 Author: Miklos Vajna <[email protected]> Date: Mon Dec 3 17:09:34 2012 +0100 OfficeArtSpContainer diff --git a/src/docdraw.py b/src/docdraw.py index c88fad0..49721c2 100644 --- a/src/docdraw.py +++ b/src/docdraw.py @@ -170,6 +170,34 @@ class OfficeArtFDG(DOCDirStream): self.printAndSet("spidCur", self.readuInt32()) print '</drawingData>' +class OfficeArtSpContainer(DOCDirStream): + """The OfficeArtSpContainer record specifies a shape container.""" + def __init__(self, parent, pos): + DOCDirStream.__init__(self, parent.bytes) + self.pos = pos + self.parent = parent + + def dump(self): + print '<shape type="OfficeArtSpContainer">' + self.rh = OfficeArtRecordHeader(self, "rh") + self.rh.dump() + pos = self.pos + recMap = { + } + while (self.rh.recLen - (pos - self.pos)) > 0: + rh = OfficeArtRecordHeader(self, pos = pos) + rh.parse() + if rh.recType in recMap: + child = recMap[rh.recType](self, pos) + child.dump() + assert child.pos == pos + OfficeArtRecordHeader.size + rh.recLen + else: + print '<todo what="OfficeArtSpContainer: recType = %s unhandled (size: %d bytes)"/>' % (hex(rh.recType), rh.recLen) + pos += OfficeArtRecordHeader.size + rh.recLen + print '</shape>' + assert pos == self.pos + self.rh.recLen + self.pos = pos + class OfficeArtSpgrContainer(DOCDirStream): """The OfficeArtSpgrContainer record specifies a container for groups of shapes.""" def __init__(self, officeArtDgContainer, pos): @@ -183,6 +211,7 @@ class OfficeArtSpgrContainer(DOCDirStream): self.rh.dump() pos = self.pos recMap = { + 0xf004: OfficeArtSpContainer } while (self.rh.recLen - (pos - self.pos)) > 0: rh = OfficeArtRecordHeader(self, pos = pos) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
