summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-04-13 18:40:31 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-04-13 18:40:31 +0200
commit9f04fbec4e1c7c9b98712537970854cd7d56ad35 (patch)
tree19c87b77c7e49a53c04909897edb9a2161302666
parentfa8053884928ea362801833d68752422c1d10dc0 (diff)
dump EmrModifyworldtransform
-rw-r--r--msodumper/docdirstream.py14
-rw-r--r--msodumper/emfrecord.py31
2 files changed, 44 insertions, 1 deletions
diff --git a/msodumper/docdirstream.py b/msodumper/docdirstream.py
index 61b0723..c9aa3d5 100644
--- a/msodumper/docdirstream.py
+++ b/msodumper/docdirstream.py
@@ -32,7 +32,7 @@ class DOCDirStream:
attrs += ' name="%s"' % dict[value]
else:
attrs += ' name="%s"' % default
- if hexdump:
+ if hexdump and type(value) != float:
value = hex(value)
if offset:
attrs += ' offset="%s"' % hex(self.pos)
@@ -109,6 +109,18 @@ class DOCDirStream:
self.pos += 4
return ret
+ def getFloat32(self, bytes=None, pos=None):
+ if not bytes:
+ bytes = self.bytes
+ if not pos:
+ pos = self.pos
+ return struct.unpack("<f", bytes[pos:pos + 4])[0]
+
+ def readFloat32(self):
+ ret = self.getFloat32()
+ self.pos += 4
+ return ret
+
def getuInt64(self, bytes=None, pos=None):
if not bytes:
bytes = self.bytes
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 7f88277..82bbcd3 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -81,6 +81,37 @@ class EmrRestoredc(EMFRecord):
assert self.pos - posOrig == self.Size
+class EmrModifyworldtransform(EMFRecord):
+ """Modifies the current world-space to page-space transform."""
+ def __init__(self, parent):
+ EMFRecord.__init__(self, parent)
+
+ def dump(self):
+ posOrig = self.pos
+ self.printAndSet("Type", self.readuInt32())
+ self.printAndSet("Size", self.readuInt32(), hexdump=False)
+ XForm(self, "Xform").dump()
+ #assert self.pos - posOrig == self.Size
+
+
+class XForm(EMFRecord):
+ """The XForm object defines a two-dimensional, linear transform matrix."""
+ def __init__(self, parent, name):
+ EMFRecord.__init__(self, parent)
+ self.name = name
+
+ def dump(self):
+ print '<%s>' % self.name
+ self.printAndSet("M11", self.readFloat32())
+ self.printAndSet("M12", self.readFloat32())
+ self.printAndSet("M21", self.readFloat32())
+ self.printAndSet("M22", self.readFloat32())
+ self.printAndSet("Dx", self.readFloat32())
+ self.printAndSet("Dy", self.readFloat32())
+ print '</%s>' % self.name
+ self.parent.pos = self.pos
+
+
# The ICMMode enumeration defines values that specify when to turn on and off ICM (Image Color Management).
ICMMode = {
0x01: "ICM_OFF",