diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-13 18:40:31 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-13 18:40:31 +0200 |
commit | 9f04fbec4e1c7c9b98712537970854cd7d56ad35 (patch) | |
tree | 19c87b77c7e49a53c04909897edb9a2161302666 | |
parent | fa8053884928ea362801833d68752422c1d10dc0 (diff) |
dump EmrModifyworldtransform
-rw-r--r-- | msodumper/docdirstream.py | 14 | ||||
-rw-r--r-- | msodumper/emfrecord.py | 31 |
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", |