| Index: experimental/tools/mskp_parser.py
|
| diff --git a/experimental/tools/mskp_parser.py b/experimental/tools/mskp_parser.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..051e5791907226bbc9d66e70addb0827fb7758aa
|
| --- /dev/null
|
| +++ b/experimental/tools/mskp_parser.py
|
| @@ -0,0 +1,57 @@
|
| +#!/usr/bin/env python
|
| +
|
| +# Copyright 2016 Google Inc.
|
| +#
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# Experimental Skia Multi-Picture Doc parser.
|
| +
|
| +from __future__ import print_function
|
| +
|
| +import fileinput
|
| +import sys
|
| +import struct
|
| +
|
| +if len(sys.argv) < 2:
|
| + sys.stderr.write('Usage:\n\tpython %s MSKP_FILE [OUTPUT_SKP]\n\n'
|
| + % sys.argv[0])
|
| + exit(1)
|
| +
|
| +mskp_src = sys.argv[1]
|
| +src = open(mskp_src, 'rb')
|
| +
|
| +magic_constant = b'Skia Multi-Picture Doc\n\n'
|
| +magic = src.read(len(magic_constant))
|
| +if magic != magic_constant:
|
| + sys.stderr.write('Not a mskp file: "%s"\n' % mskp_src)
|
| + exit(2)
|
| +
|
| +version, page_count = struct.unpack('II', src.read(8))[:2]
|
| +print('MSKP version: ', version)
|
| +print('page count: ', page_count)
|
| +if version > 2 or version < 1:
|
| + #TODO(halcanary): Remove support for version 1.
|
| + sys.stderr.write('unsupported mskp version\n')
|
| + exit(3)
|
| +offsets = []
|
| +for page in range(page_count):
|
| + print('page %3d\t' % page, end='')
|
| + if version == 1:
|
| + offset, size_x, size_y =struct.unpack('Qff', src.read(16))
|
| + print('offset = %-7d\t' % offset, end='')
|
| + offsets.append(offset)
|
| + elif version == 2:
|
| + size_x, size_y =struct.unpack('ff', src.read(8))
|
| + print('size = (%r,%r)' % (size_x, size_y))
|
| +
|
| +if len(sys.argv) >= 3:
|
| + with open(sys.argv[2], 'wb') as o:
|
| + if version == 2 or len(offsets) < 2:
|
| + while True:
|
| + file_buffer = src.read(8192)
|
| + if 0 == len(file_buffer):
|
| + break
|
| + o.write(file_buffer)
|
| + else:
|
| + o.write(src.read(offsets[1] - offsets[0]))
|
|
|