[Libreoffice-commits] mso-dumper.git: 4 commits - msodumper/emfrecord.py test/emf

Miklos Vajna vmiklos at collabora.co.uk
Thu May 1 11:58:43 PDT 2014


 msodumper/emfrecord.py       |   28 ++++++++++++++++++++++++--
 test/emf/pass/fdo31814-2.emf |binary
 test/emf/test.py             |   46 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 72 insertions(+), 2 deletions(-)

New commits:
commit f69b2c1e24c711c7451a93cc30a317c113b09d6a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu May 1 14:05:43 2014 +0200

    add testcase for fdo31814-2.emf

diff --git a/test/emf/pass/fdo31814-2.emf b/test/emf/pass/fdo31814-2.emf
new file mode 100644
index 0000000..8b3923e
Binary files /dev/null and b/test/emf/pass/fdo31814-2.emf differ
diff --git a/test/emf/test.py b/test/emf/test.py
new file mode 100755
index 0000000..c4091f5
--- /dev/null
+++ b/test/emf/test.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python2
+# -*- encoding: UTF-8 -*-
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+import sys
+sys.path.append(sys.path[0] + "/../..")
+emf_dumper = __import__('emf-dump')
+from xml.etree import ElementTree
+import unittest
+import os
+
+
+class Test(unittest.TestCase):
+    def dump(self, name):
+        try:
+            os.unlink("%s.emf.xml" % name)
+        except OSError:
+            pass
+        sock = open("%s.emf.xml" % name, "w")
+        saved = sys.stdout
+        sys.stdout = sock
+        emf_dumper.main(["emf-dumper", "%s.emf" % name])
+        sys.stdout = saved
+        sock.close()
+        tree = ElementTree.parse('%s.emf.xml' % name)
+        self.root = tree.getroot()
+        # Make sure everything is dumped - so it can't happen that dump(a) == dump(b), but a != b.
+        self.assertEqual(0, len(self.root.findall('todo')))
+
+    def test_pass(self):
+        """This test just makes sure that all files in the 'pass' directory are
+        dumped without problems."""
+
+        for dirname, dirnames, filenames in os.walk('pass'):
+            for filename in filenames:
+                if filename.endswith(".emf"):
+                    self.dump(os.path.join(dirname, filename).replace('.emf', ''))
+
+if __name__ == '__main__':
+    unittest.main()
+
+# vim:set filetype=python shiftwidth=4 softtabstop=4 expandtab:
commit e110cc9eb66a5f1bc40a2f8864bd9977e614c5ad
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu May 1 14:01:11 2014 +0200

    EMF: fix dumping of fdo31814-2.emf

diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index b25218c..4ed10b1 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -52,6 +52,7 @@ PenStyle = {
     0x00010000: "PS_GEOMETRIC",
     # Additional combinations
     0x00010200: "PS_GEOMETRIC, PS_ENDCAP_FLAT",
+    0x00011100: "PS_GEOMETRIC, PS_JOIN_BEVEL, PS_ENDCAP_SQUARE",
 }
 
 
commit 2bf7f7eb23ba7fc9e94c9fb21b5cda12d336d550
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu May 1 13:56:25 2014 +0200

    EmrComment: dump comment identifier value in case it's not a known one

diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 20502cb..b25218c 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -235,7 +235,7 @@ class EmrComment(EMFRecord):
         elif commentIdentifier == 0x43494447:  # EMR_COMMENT_PUBLIC
             print '<todo what="EmrComment::dump(): handle EMR_COMMENT_PUBLIC"/>'
         else:
-            print '<todo what="EmrComment::dump(): handle EMR_COMMENT"/>'
+            print '<todo what="EmrComment::dump(): handle EMR_COMMENT: %s"/>' % hex(commentIdentifier)
 
 
 class EmrSetviewportorgex(EMFRecord):
commit 5c0096ada4e991a19a70d8e056c84617ed90c0fe
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu May 1 13:45:01 2014 +0200

    dump EmrSetstretchbltmode

diff --git a/msodumper/emfrecord.py b/msodumper/emfrecord.py
index 1683b7f..20502cb 100644
--- a/msodumper/emfrecord.py
+++ b/msodumper/emfrecord.py
@@ -271,6 +271,29 @@ class EmrSetpolyfillmode(EMFRecord):
         assert self.pos - posOrig == self.Size
 
 
+# Used to specify how color data is added to or removed from bitmaps that are
+# stretched or compressed.
+StretchMode = {
+    0x01: "STRETCH_ANDSCANS",
+    0x02: "STRETCH_ORSCANS",
+    0x03: "STRETCH_DELETESCANS",
+    0x04: "STRETCH_HALFTONE",
+}
+
+
+class EmrSetstretchbltmode(EMFRecord):
+    """Specifies bitmap stretch 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("StretchMode", self.readuInt32(), dict=StretchMode)
+        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):
@@ -782,7 +805,7 @@ RecordType = {
     0x00000012: ['EMR_SETBKMODE'],
     0x00000013: ['EMR_SETPOLYFILLMODE', EmrSetpolyfillmode],
     0x00000014: ['EMR_SETROP2'],
-    0x00000015: ['EMR_SETSTRETCHBLTMODE'],
+    0x00000015: ['EMR_SETSTRETCHBLTMODE', EmrSetstretchbltmode],
     0x00000016: ['EMR_SETTEXTALIGN'],
     0x00000017: ['EMR_SETCOLORADJUSTMENT'],
     0x00000018: ['EMR_SETTEXTCOLOR'],


More information about the Libreoffice-commits mailing list