[Libreoffice-commits] mso-dumper.git: 4 commits - msodumper/emfrecord.py
Miklos Vajna
vmiklos at collabora.co.uk
Fri Apr 18 13:21:44 PDT 2014
msodumper/emfrecord.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 80 insertions(+), 4 deletions(-)
New commits:
commit b51ee751c3af1b73e44adb7eb19eeff83af3bcb9
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Apr 18 22:20:26 2014 +0200
dump EmrDeleteobject
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 38773f6..d96bedb 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -295,6 +295,24 @@ class EmrSelectobject(EMFRecord):
assert self.pos - posOrig == self.Size
+class EmrDeleteobject(EMFRecord):
+ """Specifies the index of the object to be deleted from the EMF Object
+ Table."""
+ 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)
+ ihObject = self.getuInt32(pos=self.pos)
+ if ihObject < 0x80000000:
+ self.printAndSet("ihObject", self.readuInt32())
+ else:
+ self.printAndSet("ihObject", self.readuInt32(), dict=StockObject)
+ assert self.pos - posOrig == self.Size
+
+
class EmrPolygon16(EMFRecord):
"""Draws a polygon consisting of two or more vertexes connected by straight lines."""
def __init__(self, parent):
@@ -521,7 +539,7 @@ RecordType = {
0x00000025: ['EMR_SELECTOBJECT', EmrSelectobject],
0x00000026: ['EMR_CREATEPEN'],
0x00000027: ['EMR_CREATEBRUSHINDIRECT', EmrCreatebrushindirect],
- 0x00000028: ['EMR_DELETEOBJECT'],
+ 0x00000028: ['EMR_DELETEOBJECT', EmrDeleteobject],
0x00000029: ['EMR_ANGLEARC'],
0x0000002A: ['EMR_ELLIPSE'],
0x0000002B: ['EMR_RECTANGLE'],
commit 1f8d9a66c2996d9b2fc68cbbc924c6995730efa6
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Apr 18 22:15:53 2014 +0200
dump EmrSelectclippath
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 2b2933d..38773f6 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -336,6 +336,21 @@ class EmrPolypolygon16(EMFRecord):
assert self.pos - posOrig == self.Size
+class EmrSelectclippath(EMFRecord):
+ """Specifies the current path as a clipping region for the playback device
+ context, combining the new region with any existing clipping region using
+ the specified mode."""
+ 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("RegionMode", self.readuInt32(), dict=RegionMode)
+ assert self.pos - posOrig == self.Size
+
+
class EmrBeginpath(EMFRecord):
"""This record opens a path bracket in the current playback device context."""
def __init__(self, parent):
@@ -533,7 +548,7 @@ RecordType = {
0x00000040: ['EMR_STROKEPATH'],
0x00000041: ['EMR_FLATTENPATH'],
0x00000042: ['EMR_WIDENPATH'],
- 0x00000043: ['EMR_SELECTCLIPPATH'],
+ 0x00000043: ['EMR_SELECTCLIPPATH', EmrSelectclippath],
0x00000044: ['EMR_ABORTPATH'],
0x00000046: ['EMR_COMMENT', EmrComment],
0x00000047: ['EMR_FILLRGN'],
commit 098d3fe8c00f666ef68e5ad0208979b90488c46f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Apr 18 22:06:18 2014 +0200
dump EmrPolypolygon16
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 288cfdd..2b2933d 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -313,6 +313,29 @@ class EmrPolygon16(EMFRecord):
assert self.pos - posOrig == self.Size
+class EmrPolypolygon16(EMFRecord):
+ """Paints a series of closed polygons."""
+ 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)
+ wmfrecord.RectL(self, "Bounds").dump()
+ self.printAndSet("NumberOfPolygons", self.readuInt32(), hexdump=False)
+ self.printAndSet("Count", self.readuInt32(), hexdump=False)
+ print '<PolygonPointCounts>'
+ for i in range(self.NumberOfPolygons):
+ self.printAndSet("PolygonPointCount", self.readuInt32(), hexdump=False)
+ print '</PolygonPointCounts>'
+ print '<aPoints>'
+ for i in range(self.Count):
+ wmfrecord.PointS(self, "aPoint").dump()
+ print '</aPoints>'
+ assert self.pos - posOrig == self.Size
+
+
class EmrBeginpath(EMFRecord):
"""This record opens a path bracket in the current playback device context."""
def __init__(self, parent):
@@ -533,7 +556,7 @@ RecordType = {
0x00000058: ['EMR_POLYBEZIERTO16'],
0x00000059: ['EMR_POLYLINETO16'],
0x0000005A: ['EMR_POLYPOLYLINE16'],
- 0x0000005B: ['EMR_POLYPOLYGON16'],
+ 0x0000005B: ['EMR_POLYPOLYGON16', EmrPolypolygon16],
0x0000005C: ['EMR_POLYDRAW16'],
0x0000005D: ['EMR_CREATEMONOBRUSH'],
0x0000005E: ['EMR_CREATEDIBPATTERNBRUSHPT'],
commit 3603cebb4a7e2de9eb6c5225af81300e037ea88e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Apr 18 21:54:28 2014 +0200
dump EmrSetpolyfillmode
diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 2a360c2..288cfdd 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -219,6 +219,26 @@ class EmrSetviewportorgex(EMFRecord):
assert self.pos - posOrig == self.Size
+# Defines values that specify how to calculate the region of a polygon that is to be filled.
+PolygonFillMode = {
+ 0x01: "ALTERNATE", # Selects alternate mode (fills the area between odd-numbered and even-numbered polygon sides on each scan line).
+ 0x02: "WINDING" # Selects winding mode (fills any region with a nonzero winding value).
+}
+
+
+class EmrSetpolyfillmode(EMFRecord):
+ """Defines polygon fill mode."""
+ 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("PolygonFillMode", self.readuInt32(), dict=PolygonFillMode)
+ assert self.pos - posOrig == self.Size
+
+
class EmrExtselectcliprgn(EMFRecord):
"""Combines the specified region with the current clip region using the specified mode."""
def __init__(self, parent):
@@ -442,7 +462,7 @@ RecordType = {
0x00000010: ['EMR_SETMAPPERFLAGS'],
0x00000011: ['EMR_SETMAPMODE'],
0x00000012: ['EMR_SETBKMODE'],
- 0x00000013: ['EMR_SETPOLYFILLMODE'],
+ 0x00000013: ['EMR_SETPOLYFILLMODE', EmrSetpolyfillmode],
0x00000014: ['EMR_SETROP2'],
0x00000015: ['EMR_SETSTRETCHBLTMODE'],
0x00000016: ['EMR_SETTEXTALIGN'],
More information about the Libreoffice-commits
mailing list