refactor: use a table for command parsing instead of chained ifs
This commit is contained in:
parent
279a6ff004
commit
899f167e58
1 changed files with 11 additions and 19 deletions
30
merge_srt.py
30
merge_srt.py
|
@ -49,30 +49,22 @@ class SRTMerger:
|
|||
except IOError as e:
|
||||
errors.append(f"Error reading {filename}: {e}")
|
||||
return commands, errors
|
||||
supported = {
|
||||
'COPY': self.parse_copy,
|
||||
'MAP': self.parse_map,
|
||||
'SYNC': self.parse_sync,
|
||||
'PUT': self.parse_put,
|
||||
}
|
||||
for line_number, line in enumerate(lines, start=1):
|
||||
parts = SRTMerger.split_line(line)
|
||||
command = parts[0].upper()
|
||||
if command not in ['COPY', 'MAP', 'SYNC', 'PUT']:
|
||||
if command not in supported:
|
||||
errors.append(f"Line {line_number}: unknown command '{command}'.")
|
||||
continue
|
||||
parsed = None
|
||||
if command == 'COPY':
|
||||
parsed = self.parse_copy(parts)
|
||||
if parsed is None:
|
||||
errors.append(f"Line {line_number}: invalid COPY command.")
|
||||
elif command == 'MAP':
|
||||
parsed = self.parse_map(parts)
|
||||
if parsed is None:
|
||||
errors.append(f"Line {line_number}: invalid MAP command.")
|
||||
elif command == 'SYNC':
|
||||
parsed = self.parse_sync(parts)
|
||||
if parsed is None:
|
||||
errors.append(f"Line {line_number}: invalid SYNC command.")
|
||||
elif command == 'PUT':
|
||||
parsed = self.parse_put(parts)
|
||||
if parsed is None:
|
||||
errors.append(f"Line {line_number}: invalid PUT command.")
|
||||
if parsed is not None:
|
||||
parsed = supported[command](parts)
|
||||
if parsed is None:
|
||||
errors.append(f"Line {line_number}: invalid {command} command.")
|
||||
else:
|
||||
commands.append(parsed)
|
||||
return commands, errors
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue