summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-04-13 19:12:26 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-04-13 19:12:26 +0200
commit253852226a367057fbe99a51f2a906a48ece57eb (patch)
treeb2b56d08a19ba65de3aa3b3ee8441dafa3c884a3
parent9f04fbec4e1c7c9b98712537970854cd7d56ad35 (diff)
dump EmrCreatebrushindirect
-rw-r--r--msodumper/emfrecord.py55
-rw-r--r--msodumper/wmfrecord.py42
2 files changed, 95 insertions, 2 deletions
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 82bbcd3..8875c9e 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -81,6 +81,56 @@ class EmrRestoredc(EMFRecord):
assert self.pos - posOrig == self.Size
+class EmrCreatebrushindirect(EMFRecord):
+ """Defines a logical brush with a LogBrushEx object."""
+ 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)
+ self.printAndSet("ihBrush", self.readuInt32(), hexdump=False)
+ LogBrushEx(self, "LogBrush").dump()
+ assert self.pos - posOrig == self.Size
+
+
+# The HatchStyle enumeration is an extension to the WMF HatchStyle enumeration.
+EmfHatchStyle = {
+ 0x0006: "HS_SOLIDCLR",
+ 0x0007: "HS_DITHEREDCLR",
+ 0x0008: "HS_SOLIDTEXTCLR",
+ 0x0009: "HS_DITHEREDTEXTCLR",
+ 0x000A: "HS_SOLIDBKCLR",
+ 0x000B: "HS_DITHEREDBKCLR"
+}
+HatchStyle = dict(wmfrecord.HatchStyle.items() + EmfHatchStyle.items())
+
+
+class LogBrushEx(EMFRecord):
+ """The LogBrushEx object defines the style, color, and pattern of a device-independent brush."""
+ def __init__(self, parent, name):
+ EMFRecord.__init__(self, parent)
+ self.name = name
+
+ def dump(self):
+ posOrig = self.pos
+ print '<%s>' % self.name
+ self.printAndSet("BrushStyle", self.readuInt32(), dict=wmfrecord.BrushStyle)
+ wmfrecord.ColorRef(self, "Color").dump()
+ self.printAndSet("BrushHatch", self.readuInt32(), dict=HatchStyle)
+ print '</%s>' % self.name
+ self.parent.pos = self.pos
+
+
+ModifyWorldTransformMode = {
+ 0x01: "MWT_IDENTITY",
+ 0x02: "MWT_LEFTMULTIPLY",
+ 0x03: "MWT_RIGHTMULTIPLY",
+ 0x04: "MWT_SET"
+}
+
+
class EmrModifyworldtransform(EMFRecord):
"""Modifies the current world-space to page-space transform."""
def __init__(self, parent):
@@ -91,7 +141,8 @@ class EmrModifyworldtransform(EMFRecord):
self.printAndSet("Type", self.readuInt32())
self.printAndSet("Size", self.readuInt32(), hexdump=False)
XForm(self, "Xform").dump()
- #assert self.pos - posOrig == self.Size
+ self.printAndSet("ModifyWorldTransformMode", self.readuInt32(), dict=ModifyWorldTransformMode)
+ assert self.pos - posOrig == self.Size
class XForm(EMFRecord):
@@ -327,7 +378,7 @@ RecordType = {
0x00000024: ['EMR_MODIFYWORLDTRANSFORM', EmrModifyworldtransform],
0x00000025: ['EMR_SELECTOBJECT'],
0x00000026: ['EMR_CREATEPEN'],
- 0x00000027: ['EMR_CREATEBRUSHINDIRECT'],
+ 0x00000027: ['EMR_CREATEBRUSHINDIRECT', EmrCreatebrushindirect],
0x00000028: ['EMR_DELETEOBJECT'],
0x00000029: ['EMR_ANGLEARC'],
0x0000002A: ['EMR_ELLIPSE'],
diff --git a/msodumper/wmfrecord.py b/msodumper/wmfrecord.py
index cd0b353..5cfcb1d 100644
--- a/msodumper/wmfrecord.py
+++ b/msodumper/wmfrecord.py
@@ -8,6 +8,32 @@
from docdirstream import DOCDirStream
+# The BrushStyle Enumeration specifies the different possible brush types that can be used in graphics operations.
+BrushStyle = {
+ 0x0000: "BS_SOLID",
+ 0x0001: "BS_NULL",
+ 0x0002: "BS_HATCHED",
+ 0x0003: "BS_PATTERN",
+ 0x0004: "BS_INDEXED",
+ 0x0005: "BS_DIBPATTERN",
+ 0x0006: "BS_DIBPATTERNPT",
+ 0x0007: "BS_PATTERN8X8",
+ 0x0008: "BS_DIBPATTERN8X8",
+ 0x0009: "BS_MONOPATTERN"
+}
+
+
+# The HatchStyle Enumeration specifies the hatch pattern.
+HatchStyle = {
+ 0x0000: "HS_HORIZONTAL",
+ 0x0001: "HS_VERTICAL",
+ 0x0002: "HS_FDIAGONAL",
+ 0x0003: "HS_BDIAGONAL",
+ 0x0004: "HS_CROSS",
+ 0x0005: "HS_DIAGCROSS"
+}
+
+
class WMFRecord(DOCDirStream):
def __init__(self, parent):
DOCDirStream.__init__(self, parent.bytes)
@@ -67,4 +93,20 @@ class PointL(WMFRecord):
print '</%s>' % self.name
self.parent.pos = self.pos
+
+class ColorRef(WMFRecord):
+ """The ColorRef Object defines the RGB color."""
+ def __init__(self, parent, name):
+ WMFRecord.__init__(self, parent)
+ self.name = name
+
+ def dump(self):
+ print '<%s type="ColorRef">' % self.name
+ self.printAndSet("Red", self.readuInt8(), hexdump=False)
+ self.printAndSet("Green", self.readuInt8(), hexdump=False)
+ self.printAndSet("Blue", self.readuInt8(), hexdump=False)
+ self.printAndSet("Reserved", self.readuInt8(), hexdump=False)
+ print '</%s>' % self.name
+ self.parent.pos = self.pos
+
# vim:set filetype=python shiftwidth=4 softtabstop=4 expandtab: