FRMC statement form implementation

This commit is contained in:
2025-12-16 11:24:42 -08:00
parent 2483e7fe43
commit 73853d215e
3 changed files with 27 additions and 8 deletions

View File

@@ -9,7 +9,6 @@ from .statements import *
from .util import collimate from .util import collimate
def parse_cmx3600_statements(file: TextIO) -> List[object]: def parse_cmx3600_statements(file: TextIO) -> List[object]:
""" """
Return a list of every statement in the file argument. Return a list of every statement in the file argument.
@@ -108,7 +107,7 @@ def _parse_remark(line, line_number) -> object:
group_patterns: list[str] = re.findall(r'\((.*?)\)', line) group_patterns: list[str] = re.findall(r'\((.*?)\)', line)
v: list[list[str]] = [re.findall(r'-?\d+(\.\d+)?', a) for v: list[list[str]] = [re.findall(r'-?\d+(\.\d+)?', a) for
a in group_patterns] a in group_patterns]
if len(v) != 3 or any([len(a) != 3 for a in v]): if len(v) != 3 or any([len(a) != 3 for a in v]):
return StmtRemark(line, line_number) return StmtRemark(line, line_number)
@@ -127,10 +126,21 @@ def _parse_remark(line, line_number) -> object:
return StmtRemark(line, line_number) return StmtRemark(line, line_number)
else: else:
return StmtCdlSat(value=value[0]) return StmtCdlSat(value=value[0], line_number=line_number)
elif line.startswith("FRMC"): elif line.startswith("FRMC"):
... match = re.match(
r'^FRMC START:\s*(\d+)\s+FRMC END:\s*(\d+)'
r'\s+FRMC DURATION:\s*(\d+)',
line)
if match is None:
return StmtRemark(line, line_number)
else:
return StmtFrmc(start=match.group(1), end=match.group(2),
duration=match.group(3), line_number=line_number)
else: else:
return StmtRemark(text=line, line_number=line_number) return StmtRemark(text=line, line_number=line_number)

View File

@@ -13,7 +13,8 @@ StmtCdlSop = namedtuple("CdlSop", ['slope_r','slope_g','slope_b',
'offset_r', 'offset_g', 'offset_b', 'offset_r', 'offset_g', 'offset_b',
'power_r', 'power_g', 'power_b', 'power_r', 'power_g', 'power_b',
'line_number']) 'line_number'])
StmtCdlSat = namedtuple("SdlSat", ['value']) StmtCdlSat = namedtuple("SdlSat", ['value', 'line_number'])
StmtFrmc = namedtuple("Frmc", ['start', 'end', 'duration', 'line_number'])
StmtRemark = namedtuple("Remark", ["text", "line_number"]) StmtRemark = namedtuple("Remark", ["text", "line_number"])
StmtEffectsName = namedtuple("EffectsName", ["name", "line_number"]) StmtEffectsName = namedtuple("EffectsName", ["name", "line_number"])
StmtSourceUMID = namedtuple("Source", ["name", "umid", "line_number"]) StmtSourceUMID = namedtuple("Source", ["name", "umid", "line_number"])

View File

@@ -145,3 +145,11 @@ class TestParse(TestCase):
for event in edl.events: for event in edl.events:
if event.number == 1: if event.number == 1:
... ...
def test_frmc(self):
with open("tests/edls/cdl_frmc_example01.edl", "r") as f:
edl = pycmx.parse_cmx3600(f)
for event in edl.events:
if event.number == 1:
...