diff --git a/pycmx/parse_cmx_statements.py b/pycmx/parse_cmx_statements.py index 3f9c414..894996e 100644 --- a/pycmx/parse_cmx_statements.py +++ b/pycmx/parse_cmx_statements.py @@ -58,27 +58,17 @@ def _parse_cmx3600_line(line: str, line_number: int) -> object: :param line: A single EDL line. :param line_number: The index of this line in the file. """ - long_event_num_p = re.compile("^[0-9]{6} ") - short_event_num_p = re.compile("^[0-9]{3} ") - x_event_form_p = re.compile("^([0-9]{4,5}) ") - + event_num_p = re.compile(r"^(\d+) ") + line_matcher = event_num_p.match(line) + if line.startswith("TITLE:"): return _parse_title(line, line_number) elif line.startswith("FCM:"): return _parse_fcm(line, line_number) - elif long_event_num_p.match(line) is not None: - length_file_128 = sum(_edl_column_widths(6, 128)) - if len(line) < length_file_128: - return _parse_long_standard_form(line, 32, line_number) - else: - return _parse_long_standard_form(line, 128, line_number) - elif (m := x_event_form_p.match(line)) is not None: - assert m is not None - event_field_length = len(m[1]) - return _parse_columns_for_standard_form(line, event_field_length, - 8, line_number) - elif short_event_num_p.match(line) is not None: - return _parse_standard_form(line, line_number) + elif line_matcher is not None: + event_field_len = len(line_matcher.group(1)) + source_field_len = len(line) - (event_field_len + 65) + return _parse_columns_for_standard_form(line, event_field_len, source_field_len, line_number) elif line.startswith("AUD"): return _parse_extended_audio_channels(line, line_number) elif line.startswith("*"): @@ -108,26 +98,24 @@ def _parse_fcm(line, line_num) -> StmtFCM: return StmtFCM(drop=False, line_number=line_num) -def _parse_long_standard_form(line, source_field_length, line_number): - return _parse_columns_for_standard_form(line, 6, source_field_length, - line_number) +# def _parse_long_standard_form(line, event_field_length, source_field_length, line_number): +# return _parse_columns_for_standard_form(line, , source_field_length, +# line_number) -def _parse_standard_form(line, line_number): - return _parse_columns_for_standard_form(line, 3, 8, line_number) +# def _parse_standard_form(line, line_number): +# return _parse_columns_for_standard_form(line, 3, 8, line_number) def _parse_extended_audio_channels(line, line_number): content = line.strip() - if content == "AUD 3": - return StmtAudioExt(audio3=True, audio4=False, line_number=line_number) - elif content == "AUD 4": - return StmtAudioExt(audio3=False, audio4=True, line_number=line_number) - elif content == "AUD 3 4": - return StmtAudioExt(audio3=True, audio4=True, line_number=line_number) + audio3 = True if "3" in content else False + audio4 = True if "4" in content else False + + if audio3 or audio4: + return StmtAudioExt(audio3, audio4, line_number) else: - return StmtUnrecognized(content=line, line_number=line_number) - + return StmtUnrecognized(line, line_number) def _parse_remark(line, line_number) -> object: if line.startswith("FROM CLIP NAME:"): diff --git a/tests/edls/ISSUE_14_conform_edl_issue_01.txt b/tests/edls/ISSUE_14_conform_edl_issue_01.edl similarity index 100% rename from tests/edls/ISSUE_14_conform_edl_issue_01.txt rename to tests/edls/ISSUE_14_conform_edl_issue_01.edl diff --git a/tests/edls/ISSUE_14_conform_edl_issue_02.txt b/tests/edls/ISSUE_14_conform_edl_issue_02.edl similarity index 100% rename from tests/edls/ISSUE_14_conform_edl_issue_02.txt rename to tests/edls/ISSUE_14_conform_edl_issue_02.edl diff --git a/tests/edls/ISSUE_14_conform_edl_issue_03.txt b/tests/edls/ISSUE_14_conform_edl_issue_03.edl similarity index 100% rename from tests/edls/ISSUE_14_conform_edl_issue_03.txt rename to tests/edls/ISSUE_14_conform_edl_issue_03.edl diff --git a/tests/test_parse.py b/tests/test_parse.py index 8d75512..3212d52 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -39,8 +39,10 @@ class TestParse(TestCase): with open(path, 'r') as f: edl = pycmx.parse_cmx3600(f) for index, event in enumerate(edl.events): - self.assertTrue(len(event.edits) > 0) - self.assertTrue(event.number == index + 1) + self.assertTrue(len(event.edits) > 0, + f"Failed for {path}") + self.assertEqual(event.number, index + 1, + f"Failed for {path}") def test_events(self): with open("tests/edls/TEST.edl", 'r') as f: @@ -119,4 +121,5 @@ class TestParse(TestCase): encoding='ISO-8859-1') as f: edl = pycmx.parse_cmx3600(f) events = list(edl.events) + self.assertEqual(len(events), 2839)