From 49096c7ae28bdaa350d6d184e741f0d48dac8fbb Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Mon, 1 Nov 2010 04:17:40 +0200 Subject: TOOLS/matroska.py: change to python3 syntax --- TOOLS/matroska.py | 76 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 37 deletions(-) (limited to 'TOOLS/matroska.py') diff --git a/TOOLS/matroska.py b/TOOLS/matroska.py index a9e897fea4..24c962f53b 100755 --- a/TOOLS/matroska.py +++ b/TOOLS/matroska.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 """ Generate C definitions for parsing Matroska files. Can also be used to directly parse Matroska files and display their contents. @@ -178,9 +178,10 @@ elements_matroska = ( import sys from math import ldexp +from binascii import hexlify def byte2num(s): - return int(s.encode('hex'), 16) + return int(hexlify(s), 16) def camelcase_to_words(name): parts = [] @@ -197,14 +198,14 @@ class MatroskaElement(object): def __init__(self, name, elid, valtype, namespace): self.name = name - self.definename = '%s_ID_%s' % (namespace, name.upper()) + self.definename = '{}_ID_{}'.format(namespace, name.upper()) self.fieldname = camelcase_to_words(name) self.structname = 'ebml_' + self.fieldname self.elid = elid self.valtype = valtype if valtype == 'sub': self.ebmltype = 'EBML_TYPE_SUBELEMENTS' - self.valname = 'struct %s' % self.structname + self.valname = 'struct ' + self.structname else: self.ebmltype = 'EBML_TYPE_' + valtype.upper() try: @@ -242,53 +243,54 @@ parse_elems(elements_matroska, 'MATROSKA') def generate_C_header(): print('// Generated by TOOLS/matroska.py, do not edit manually') - print + print() for el in elementlist: - print('#define %-40s 0x%s' % (el.definename, el.elid)) + print('#define {0.definename:40} 0x{0.elid}'.format(el)) - print + print() for el in reversed(elementlist): if not el.subelements: continue - print - print('struct %s {' % el.structname) + print() + print('struct {0.structname} {{'.format(el)) l = max(len(subel.valname) for subel, multiple in el.subelements)+1 for subel, multiple in el.subelements: - print(' %-*s %s%s;' % (l, subel.valname, (' ', '*')[multiple], - subel.fieldname)) - print + print(' {e.valname:{l}} {star}{e.fieldname};'.format( + e=subel, l=l, star=' *'[multiple])) + print() for subel, multiple in el.subelements: - print(' int n_%s;' % (subel.fieldname)) + print(' int n_{0.fieldname};'.format(subel)) print('};') for el in elementlist: if not el.subelements: continue - print('extern const struct ebml_elem_desc %s_desc;' % el.structname) + print('extern const struct ebml_elem_desc {0.structname}_desc;'.format( + el)) - print - print('#define MAX_EBML_SUBELEMENTS %d' % max(len(el.subelements) - for el in elementlist)) + print() + print('#define MAX_EBML_SUBELEMENTS', max(len(el.subelements) + for el in elementlist)) def generate_C_definitions(): print('// Generated by TOOLS/matroska.py, do not edit manually') - print + print() for el in reversed(elementlist): - print + print() if el.subelements: - print('#define N %s' % el.fieldname) - print('E_S("%s", %d)' % (el.name, len(el.subelements))) + print('#define N', el.fieldname) + print('E_S("{}", {})'.format(el.name, len(el.subelements))) for subel, multiple in el.subelements: - print('F(%s, %s, %d)' % (subel.definename, subel.fieldname, - multiple)) + print('F({0.definename}, {0.fieldname}, {1})'.format( + subel, int(multiple))) print('}};') print('#undef N') else: - print('E("%s", %s, %s)' % (el.name, el.fieldname, el.ebmltype)) + print('E("{0.name}", {0.fieldname}, {0.ebmltype})'.format(el)) def read(s, length): t = s.read(length) @@ -317,7 +319,7 @@ def read_vint(s): while not ord(t) & mask: i += 1 mask >>= 1 - t = chr(ord(t) & (mask - 1)) + t = bytes((ord(t) & (mask - 1),)) t += read(s, i) return i+1, byte2num(t) @@ -351,7 +353,7 @@ def read_float(s, length): return f def parse_one(s, depth, parent, maxlen): - elid = read_id(s).encode('hex') + elid = hexlify(read_id(s)).decode('ascii') elem = elementd.get(elid) if parent is not None and elid not in parent.subids and elid not in ('ec', 'bf'): print('Unexpected:', elid) @@ -361,7 +363,7 @@ def parse_one(s, depth, parent, maxlen): this_length = len(elid) / 2 + size + length if elem is not None: if elem.valtype != 'skip': - print depth, elid, elem.name, 'size:', length, 'value:', + print(depth, elid, elem.name, 'size:', length, 'value:', end=' ') if elem.valtype == 'sub': print('subelements:') while length > 0: @@ -369,27 +371,27 @@ def parse_one(s, depth, parent, maxlen): if length < 0: raise SyntaxError elif elem.valtype == 'str': - print 'string', repr(read_str(s, length)) + print('string', repr(read_str(s, length).decode('utf8', 'replace'))) elif elem.valtype in ('binary', 'ebml_id'): t = read_str(s, length) dec = '' if elem.valtype == 'ebml_id': - idelem = elementd.get(t.encode('hex')) + idelem = elementd.get(hexlify(t).decode('ascii')) if idelem is None: dec = '(UNKNOWN)' else: - dec = '(%s)' % idelem.name + dec = '({0.name})'.format(idelem) if len(t) < 20: - t = t.encode('hex') + t = hexlify(t).decode('ascii') else: - t = '' % len(t) - print 'binary', t, dec + t = ''.format(len(t)) + print('binary', t, dec) elif elem.valtype == 'uint': - print 'uint', read_uint(s, length) + print('uint', read_uint(s, length)) elif elem.valtype == 'sint': - print 'sint', read_sint(s, length) + print('sint', read_sint(s, length)) elif elem.valtype == 'float': - print 'float', read_float(s, length) + print('float', read_float(s, length)) elif elem.valtype == 'skip': read(s, length) else: @@ -407,6 +409,6 @@ if sys.argv[1] == '--generate-header': elif sys.argv[1] == '--generate-definitions': generate_C_definitions() else: - s = open(sys.argv[1]) + s = open(sys.argv[1], "rb") while 1: parse_toplevel(s) -- cgit v1.2.3