[Libreoffice-commits] .: 3 commits - src/docdraw.py

Miklos Vajna vmiklos at kemper.freedesktop.org
Mon Dec 3 08:57:07 PST 2012


 src/docdraw.py |   97 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 87 insertions(+), 10 deletions(-)

New commits:
commit 0675409678a7719f29f0f20695f91c0a1d7e6c67
Author: Miklos Vajna <vmiklos at suse.cz>
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 <vmiklos at suse.cz>
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 <vmiklos at suse.cz>
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)


More information about the Libreoffice-commits mailing list