Commit d8969fe15c8411ac163b6d84bf6a7d9dc316599e

Authored by Philippe Lagadec
1 parent 9a143718

olemeta: improved display - table and colors

Showing 1 changed file with 30 additions and 6 deletions
oletools/olemeta.py
... ... @@ -56,8 +56,9 @@ __version__ = '0.03'
56 56  
57 57 #=== IMPORTS =================================================================
58 58  
59   -import sys
  59 +import sys, codecs
60 60 import thirdparty.olefile as olefile
  61 +from thirdparty.tablestream import tablestream
61 62  
62 63  
63 64 #=== MAIN =================================================================
... ... @@ -70,19 +71,42 @@ except IndexError:
70 71 # parse and display metadata:
71 72 meta = ole.get_metadata()
72 73  
73   -print('Properties from SummaryInformation stream:')
  74 +# console output with UTF8 encoding:
  75 +console_utf8 = codecs.getwriter('utf8')(sys.stdout)
  76 +
  77 +# TODO: move similar code to a function
  78 +
  79 +print('Properties from the SummaryInformation stream:')
  80 +t = tablestream.TableStream([21, 30], header_row=['Property', 'Value'], outfile=console_utf8)
74 81 for prop in meta.SUMMARY_ATTRIBS:
75 82 value = getattr(meta, prop)
76 83 if value is not None:
77 84 # TODO: pretty printing for strings, dates, numbers
78   - print('- %s: %s' % (prop, value))
  85 + # TODO: better unicode handling
  86 + # print('- %s: %s' % (prop, value))
  87 + if isinstance(value, unicode):
  88 + # encode to UTF8, avoiding errors
  89 + value = value.encode('utf-8', errors='replace')
  90 + else:
  91 + value = str(value)
  92 + t.write_row([prop, value], colors=[None, 'yellow'])
  93 +t.close()
79 94 print ''
80   -print('Properties from DocumentSummaryInformation stream:')
  95 +
  96 +print('Properties from the DocumentSummaryInformation stream:')
  97 +t = tablestream.TableStream([21, 30], header_row=['Property', 'Value'], outfile=console_utf8)
81 98 for prop in meta.DOCSUM_ATTRIBS:
82 99 value = getattr(meta, prop)
83 100 if value is not None:
84 101 # TODO: pretty printing for strings, dates, numbers
85   - print('- %s: %s' % (prop, value))
86   -
  102 + # TODO: better unicode handling
  103 + # print('- %s: %s' % (prop, value))
  104 + if isinstance(value, unicode):
  105 + # encode to UTF8, avoiding errors
  106 + value = value.encode('utf-8', errors='replace')
  107 + else:
  108 + value = str(value)
  109 + t.write_row([prop, value], colors=[None, 'yellow'])
  110 +t.close()
87 111  
88 112 ole.close()
... ...