Switch to side-by-side view

--- a/src/filters/xls-dump.py
+++ b/src/filters/xls-dump.py
@@ -4,11 +4,7 @@
 # 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/.
 #
-
-# mso-dumper is not compatible with python3
-
-from __future__ import print_function
-
+from builtins import range
 import sys, os.path, optparse
 sys.path.append(sys.path[0]+"/msodump.zip")
 
@@ -21,8 +17,8 @@
     if len(name) != len(array):
         return False
 
-    for i in xrange(0, len(name)):
-        if ord(name[i]) != array[i]:
+    for i in range(0, len(name)):
+        if globals.indexbytes(name, i) != array[i]:
             return False
 
     return True
@@ -50,13 +46,13 @@
     def __printDirHeader (self, direntry, byteLen):
         dirname = direntry.Name
         dirname = globals.encodeName(dirname)
-        print("")
-        print("="*globals.OutputWidth)
+        globals.outputln("")
+        globals.outputln("="*globals.OutputWidth)
         if direntry.isStorage():
-            print("%s (storage)"%dirname)
+            globals.outputln("%s (storage)"%dirname)
         else:
-            print("%s (stream, size: %d bytes)"%(dirname, byteLen))
-        print("-"*globals.OutputWidth)
+            globals.outputln("%s (stream, size: %d bytes)"%(dirname, byteLen))
+        globals.outputln("-"*globals.OutputWidth)
 
     def __parseFile (self):
         file = open(self.filepath, 'rb')
@@ -71,38 +67,34 @@
         root = docroot.appendElement('xls-dump')
 
         for d in dirs:
-            if d.Name != "Workbook":
+            if d.Name != b"Workbook":
                 # for now, we only dump the Workbook directory stream.
                 continue
 
             dirstrm = self.strm.getDirectoryStream(d)
             data = self.__readSubStreamXML(dirstrm)
             self.__dumpDataAsXML(data, root)
-        node.prettyPrint(sys.stdout, docroot, utf8 = self.params.utf8)
+
+        node.prettyPrint(globals.utfwriter(), docroot, utf8 = self.params.utf8)
 
     def dumpCanonicalXML (self):
-        try:
-            self.__parseFile()
-            docroot = node.Root()
-            root = docroot.appendElement('xls-dump')
-
-            dirEntries = self.strm.getDirectoryEntries()
-            for entry in dirEntries:
-                dirname = entry.Name
-                if dirname != "Workbook":
-                    # for now, we only dump the Workbook directory stream.
-                    continue
-                
-                dirstrm = self.strm.getDirectoryStream(entry)
-                wbmodel = self.__buildWorkbookModel(dirstrm)
-                wbmodel.encrypted = self.strmData.encrypted
-                root.appendChild(wbmodel.createDOM())
-                
-                node.prettyPrint(sys.stdout, docroot, utf8 = self.params.utf8)
-
-        except Exception as err:
-            print("xls-dump.py: error: %s" % err, file=sys.stderr)
-            sys.exit(1)
+        self.__parseFile()
+        docroot = node.Root()
+        root = docroot.appendElement('xls-dump')
+
+        dirEntries = self.strm.getDirectoryEntries()
+        for entry in dirEntries:
+            dirname = entry.Name
+            if dirname != b"Workbook":
+                # for now, we only dump the Workbook directory stream.
+                continue
+
+            dirstrm = self.strm.getDirectoryStream(entry)
+            wbmodel = self.__buildWorkbookModel(dirstrm)
+            wbmodel.encrypted = self.strmData.encrypted
+            root.appendChild(wbmodel.createDOM())
+
+        node.prettyPrint(globals.utfwriter(), docroot, utf8 = self.params.utf8)
 
     def dump (self):
         self.__parseFile()
@@ -123,18 +115,18 @@
             if entry.isStorage():
                 continue
 
-            elif dirname == "Workbook":
+            elif dirname == b"Workbook":
                 success = True
                 while success:
                     success = self.__readSubStream(dirstrm)
 
-            elif dirname == "Revision Log":
+            elif dirname == b"Revision Log":
                 dirstrm.type = xlsstream.DirType.RevisionLog
                 self.__readSubStream(dirstrm)
 
-            elif dirname == "EncryptionInfo":
+            elif dirname == b"EncryptionInfo":
                 globals.dumpBytes(dirstrm.bytes, 512)
-                print("-"*globals.OutputWidth)
+                globals.outputln("-"*globals.OutputWidth)
                 info = msocrypto.EncryptionInfo(dirstrm.bytes)
                 info.read()
                 info.output()