msodumper/wmfrecord.py |   27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

New commits:
commit 6c81a12ef517ac5754214cd3d7e66c043c076def
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Wed Nov 3 12:07:01 2021 +0100
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Nov 3 12:07:01 2021 +0100

    wmfrecord: dump META_DIBSTRETCHBLT
    
    But don't show the DIB which may be huge, just its size.
    
    Change-Id: I595133cc62b7d5395d51722850d465412afe2442

diff --git a/msodumper/wmfrecord.py b/msodumper/wmfrecord.py
index e747b82..27b472c 100644
--- a/msodumper/wmfrecord.py
+++ b/msodumper/wmfrecord.py
@@ -779,7 +779,7 @@ class Header(WMFRecord):
         if PlaceableHeader(self).isPlaceable():
             PlaceableHeader(self).dump()
             self.Size += 22
-        print("<header>")
+        print('<header type="META_HEADER">')
         self.printAndSet("FileType", self.readuInt16(), dict=MetafileType)
         self.printAndSet("HeaderSize", self.readuInt16(), hexdump=False)
         self.printAndSet("Version", self.readuInt16(), hexdump=False)
@@ -798,7 +798,7 @@ class PlaceableHeader(WMFRecord):
         WMFRecord.__init__(self, parent)
 
     def dump(self):
-        print("<placeableHeader>")
+        print('<placeableHeader type="META_PLACEABLE">')
         self.header = Header(self)
         self.Size = 22
         pos = self.pos
@@ -1460,12 +1460,31 @@ class Pie(WMFRecord):
 
 
 class StretchBlt(WMFRecord):
+    """2.3.1.3 META_DIBSTRETCHBLT Record"""
     def __init__(self, parent):
         WMFRecord.__init__(self, parent)
+        self.name = "stretchblt"
 
     def dump(self):
-        print("<todo/>")
-        pass
+        dataPos = self.pos
+        print('<%s type="StretchBlt">' % self.name)
+        self.printAndSet("RecordSize", self.readuInt32(), hexdump=False)
+        self.printAndSet("RecordFunction", self.readuInt16(), hexdump=True)
+        self.printAndSet("SrcHeight", self.readInt16(), hexdump=False)
+        self.printAndSet("SrcWidth", self.readInt16(), hexdump=False)
+        self.printAndSet("YSrc", self.readInt16(), hexdump=False)
+        self.printAndSet("XSrc", self.readInt16(), hexdump=False)
+        self.printAndSet("DestHeight", self.readInt16(), hexdump=False)
+        self.printAndSet("DestWidth", self.readInt16(), hexdump=False)
+        self.printAndSet("YDest", self.readInt16(), hexdump=False)
+        self.printAndSet("XDest", self.readInt16(), hexdump=False)
+        # RecordSize is described in words, so we should double for bytes
+        end = dataPos + self.RecordSize * 2
+        targetSize = end - self.pos
+        print('<Target size="%s"/>' % targetSize)
+        self.pos += targetSize
+        print('</%s>' % self.name)
+        assert self.pos == end
 
 
 class Escape(WMFRecord):

Reply via email to