diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-13 19:12:26 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-04-13 19:12:26 +0200 |
commit | 253852226a367057fbe99a51f2a906a48ece57eb (patch) | |
tree | b2b56d08a19ba65de3aa3b3ee8441dafa3c884a3 | |
parent | 9f04fbec4e1c7c9b98712537970854cd7d56ad35 (diff) |
dump EmrCreatebrushindirect
-rw-r--r-- | msodumper/emfrecord.py | 55 | ||||
-rw-r--r-- | msodumper/wmfrecord.py | 42 |
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: |