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

Miklos Vajna vmiklos at kemper.freedesktop.org
Fri Dec 7 07:49:12 PST 2012


 src/docdraw.py   |  100 +++++++++++++++++--------------------------------------
 src/docrecord.py |    4 +-
 2 files changed, 33 insertions(+), 71 deletions(-)

New commits:
commit eaf5990adaad7fa6087fb89b883101c13e6429b3
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Fri Dec 7 16:49:06 2012 +0100

    docdraw: remove no longer needed OfficeArtContainedContainer

diff --git a/src/docdraw.py b/src/docdraw.py
index 5087c53..ac3bcff 100644
--- a/src/docdraw.py
+++ b/src/docdraw.py
@@ -12,17 +12,21 @@ import docsprm
 import msodraw
 
 class OfficeArtContainer(DOCDirStream):
-    def __init__(self, parent, name, type):
+    def __init__(self, parent, name, type, contained):
         DOCDirStream.__init__(self, parent.bytes)
         self.name = name
         self.type = type
+        self.contained = contained
         self.pos = parent.pos
         self.parent = parent
 
-    def dumpXml(self):
-        print '<%s type="%s" offset="%d">' % (self.name, self.type, self.pos)
-        self.rh = msodraw.RecordHeader(self)
-        self.rh.dumpXml(self)
+    def dumpXml(self, recHdl, rh = None):
+        print '<%s type="%s">' % (self.name, self.type)
+        if self.contained:
+            self.rh = rh
+        else:
+            self.rh = msodraw.RecordHeader(self)
+            self.rh.dumpXml(self)
         pos = self.pos
         while (self.rh.recLen - (pos - self.pos)) > 0:
             posOrig = self.pos
@@ -32,16 +36,11 @@ class OfficeArtContainer(DOCDirStream):
             self.pos = posOrig
             pos += msodraw.RecordHeader.size
             if rh.recType in recMap:
-                if len(recMap[rh.recType]) == 2:
-                    child = recMap[rh.recType][0](self, pos)
-                    child.dumpXml(self, rh)
-                    assert child.pos == pos + rh.recLen
-                else:
-                    posOrig = self.pos
-                    self.pos = pos
-                    child = recMap[rh.recType][0](self)
-                    child.dumpXml(self, rh)
-                    self.pos = posOrig
+                posOrig = self.pos
+                self.pos = pos
+                child = recMap[rh.recType](self)
+                child.dumpXml(self, rh)
+                self.pos = posOrig
             else:
                 print '<todo what="%s: recType = %s unhandled (size: %d bytes)"/>' % (self.type, hex(rh.recType), rh.recLen)
             pos += rh.recLen
@@ -52,70 +51,33 @@ class OfficeArtContainer(DOCDirStream):
 class OfficeArtDggContainer(OfficeArtContainer):
     """The OfficeArtDggContainer record type specifies the container for all the OfficeArt file records that contain document-wide data."""
     def __init__(self, officeArtContent, name):
-        OfficeArtContainer.__init__(self, officeArtContent, name, "OfficeArtDggContainer")
+        OfficeArtContainer.__init__(self, officeArtContent, name, "OfficeArtDggContainer", False)
 
 class OfficeArtDgContainer(OfficeArtContainer):
     """The OfficeArtDgContainer record specifies the container for all the file records for the objects in a drawing."""
     def __init__(self, officeArtContent, name):
-        OfficeArtContainer.__init__(self, officeArtContent, name, "OfficeArtDgContainer")
+        OfficeArtContainer.__init__(self, officeArtContent, name, "OfficeArtDgContainer", False)
 
-class OfficeArtContainedContainer(DOCDirStream):
-    def __init__(self, parent, pos, name, type):
-        DOCDirStream.__init__(self, parent.bytes)
-        self.pos = pos
-        self.name = name
-        self.type = type
-        self.parent = parent
-
-    def dumpXml(self, compat, rh):
-        self.rh = rh
-        print '<%s type="OfficeArtSpContainer">' % self.name
-        pos = self.pos
-        while (self.rh.recLen - (pos - self.pos)) > 0:
-            posOrig = self.pos
-            self.pos = pos
-            rh = msodraw.RecordHeader(self)
-            rh.dumpXml(self)
-            self.pos = posOrig
-            pos += msodraw.RecordHeader.size
-            if rh.recType in recMap:
-                if len(recMap[rh.recType]) == 2:
-                    child = recMap[rh.recType][0](self, pos)
-                    child.dumpXml(self, rh)
-                    assert child.pos == pos + rh.recLen
-                else:
-                    posOrig = self.pos
-                    self.pos = pos
-                    child = recMap[rh.recType][0](self)
-                    child.dumpXml(self, rh)
-                    self.pos = posOrig
-            else:
-                print '<todo what="%s: recType = %s unhandled (size: %d bytes)"/>' % (self.type, hex(rh.recType), rh.recLen)
-            pos += rh.recLen
-        print '</%s>' % self.name
-        assert pos == self.pos + self.rh.recLen
-        self.pos = pos
-
-class OfficeArtSpContainer(OfficeArtContainedContainer):
+class OfficeArtSpContainer(OfficeArtContainer):
     """The OfficeArtSpContainer record specifies a shape container."""
-    def __init__(self, parent, pos):
-        OfficeArtContainedContainer.__init__(self, parent, pos, "shape", "OfficeArtSpContainer")
+    def __init__(self, parent):
+        OfficeArtContainer.__init__(self, parent, "shape", "OfficeArtSpContainer", True)
 
-class OfficeArtSpgrContainer(OfficeArtContainedContainer):
+class OfficeArtSpgrContainer(OfficeArtContainer):
     """The OfficeArtSpgrContainer record specifies a container for groups of shapes."""
-    def __init__(self, officeArtDgContainer, pos):
-        OfficeArtContainedContainer.__init__(self, officeArtDgContainer, pos, "groupShape", "OfficeArtSpgrContainer")
+    def __init__(self, officeArtDgContainer):
+        OfficeArtContainer.__init__(self, officeArtDgContainer, "groupShape", "OfficeArtSpgrContainer", True)
 
 recMap = {
-        0xf003: [OfficeArtSpgrContainer, True],
-        0xf004: [OfficeArtSpContainer, True],
-        0xf006: [msodraw.FDGGBlock],
-        0xf008: [msodraw.FDG],
-        0xf009: [msodraw.FSPGR],
-        0xf00a: [msodraw.FSP],
-        0xf00b: [msodraw.FOPT],
-        0xf011: [msodraw.FClientData],
-        0xf11e: [msodraw.SplitMenuColorContainer],
+        0xf003: OfficeArtSpgrContainer,
+        0xf004: OfficeArtSpContainer,
+        0xf006: msodraw.FDGGBlock,
+        0xf008: msodraw.FDG,
+        0xf009: msodraw.FSPGR,
+        0xf00a: msodraw.FSP,
+        0xf00b: msodraw.FOPT,
+        0xf011: msodraw.FClientData,
+        0xf11e: msodraw.SplitMenuColorContainer,
         }
 
 # vim:set filetype=python shiftwidth=4 softtabstop=4 expandtab:
diff --git a/src/docrecord.py b/src/docrecord.py
index 2d11e51..4e7beb9 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -1575,7 +1575,7 @@ class OfficeArtWordDrawing(DOCDirStream):
     def dump(self):
         print '<officeArtWordDrawing type="OfficeArtWordDrawing" pos="%d">' % self.pos
         self.printAndSet("dgglbl", self.readuInt8())
-        docdraw.OfficeArtDgContainer(self, "container").dumpXml()
+        docdraw.OfficeArtDgContainer(self, "container").dumpXml(self)
         print '</officeArtWordDrawing>'
         self.officeArtContent.pos = self.pos
 
@@ -1589,7 +1589,7 @@ class OfficeArtContent(DOCDirStream):
 
     def dump(self):
         print '<officeArtContent type="OfficeArtContent" offset="%d" size="%d bytes">' % (self.pos, self.size)
-        docdraw.OfficeArtDggContainer(self, "DrawingGroupData").dumpXml()
+        docdraw.OfficeArtDggContainer(self, "DrawingGroupData").dumpXml(self)
         print '<Drawings type="main" offset="%d">' % self.pos
         OfficeArtWordDrawing(self).dump()
         print '</Drawings>'


More information about the Libreoffice-commits mailing list