TOOLS/matroska.py: fix some minor things for dumping

TOOLS/matroska.py can be used stand-alone for dumping Matroska file
contents. Fix some related issues.

Elements were treated as unknown if the element hex ID contained
uppercase characters.

Unknown elements stopped parsing. This was intentional, but I don't
really see any reason for it.

Dumping with Python 2 is broken. I don't care, but everytime I hit this,
I find myself trying to find out why. So make it error out explicitly.
This commit is contained in:
wm4 2017-01-31 14:47:11 +01:00
parent c178920505
commit 55d6408526
1 changed files with 4 additions and 5 deletions

View File

@ -271,6 +271,7 @@ def parse_elems(l, namespace):
for el in l: for el in l:
if isinstance(el, str): if isinstance(el, str):
name, hexid, eltype = [x.strip() for x in el.split(',')] name, hexid, eltype = [x.strip() for x in el.split(',')]
hexid = hexid.lower()
multiple = name.endswith('*') multiple = name.endswith('*')
name = name.strip('*') name = name.strip('*')
new = MatroskaElement(name, hexid, eltype, namespace) new = MatroskaElement(name, hexid, eltype, namespace)
@ -400,10 +401,6 @@ def read_float(s, length):
def parse_one(s, depth, parent, maxlen): def parse_one(s, depth, parent, maxlen):
elid = hexlify(read_id(s)).decode('ascii') elid = hexlify(read_id(s)).decode('ascii')
elem = elementd.get(elid) elem = elementd.get(elid)
if parent is not None and elid not in parent.subids and elid not in ('ec', 'bf'):
print('Unexpected:', elid)
if 1:
raise NotImplementedError
size, length = read_vint(s) size, length = read_vint(s)
this_length = len(elid) / 2 + size + length this_length = len(elid) / 2 + size + length
if elem is not None: if elem is not None:
@ -442,7 +439,7 @@ def parse_one(s, depth, parent, maxlen):
else: else:
raise NotImplementedError raise NotImplementedError
else: else:
print(depth, 'Unknown element:', elid, 'size:', length) print(" " * depth, '[' + elid + '] Unknown element! size:', length)
read(s, length) read(s, length)
return this_length return this_length
@ -455,6 +452,8 @@ if __name__ == "__main__":
elif sys.argv[1] == '--generate-definitions': elif sys.argv[1] == '--generate-definitions':
generate_C_definitions(sys.stdout) generate_C_definitions(sys.stdout)
else: else:
if sys.version_info.major < 3:
raise Exception("Dumping requires Python 3.")
s = open(sys.argv[1], "rb") s = open(sys.argv[1], "rb")
while 1: while 1:
start = s.tell() start = s.tell()