mirror of
https://github.com/iluvcapra/pycmx.git
synced 2026-01-02 01:40:58 +00:00
Implemented SOP form parsing
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from typing import TextIO, List
|
from typing import Any, TextIO, List
|
||||||
|
|
||||||
from .statements import *
|
from .statements import *
|
||||||
from .util import collimate
|
from .util import collimate
|
||||||
@@ -104,6 +104,26 @@ def _parse_remark(line, line_number) -> object:
|
|||||||
elif line.startswith("SOURCE FILE:"):
|
elif line.startswith("SOURCE FILE:"):
|
||||||
return StmtSourceFile(filename=line[12:].strip(),
|
return StmtSourceFile(filename=line[12:].strip(),
|
||||||
line_number=line_number)
|
line_number=line_number)
|
||||||
|
elif line.startswith("ASC_SOP"):
|
||||||
|
group_patterns: list[str] = re.findall(r'\((.*?)\)', line)
|
||||||
|
|
||||||
|
v: list[list[str]] = [re.findall(r'-?\d+(\.\d+)?', a) for
|
||||||
|
a in group_patterns]
|
||||||
|
|
||||||
|
if len(v) != 3 or any([len(a) != 3 for a in v]):
|
||||||
|
return StmtRemark(line, line_number)
|
||||||
|
|
||||||
|
else:
|
||||||
|
return StmtCdlSop(slope_r=v[0][0], slope_g=v[0][1],
|
||||||
|
slope_b=v[0][2], offset_r=v[1][0],
|
||||||
|
offset_g=v[1][1], offset_b=v[1][2],
|
||||||
|
power_r=v[2][0], power_g=v[2][1],
|
||||||
|
power_b=v[2][2], line_number=line_number)
|
||||||
|
|
||||||
|
elif line.startswith("ASC_SAT"):
|
||||||
|
...
|
||||||
|
elif line.startswith("FRMC"):
|
||||||
|
...
|
||||||
else:
|
else:
|
||||||
return StmtRemark(text=line, line_number=line_number)
|
return StmtRemark(text=line, line_number=line_number)
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ StmtEvent = namedtuple("Event", ["event", "source", "channels", "trans",
|
|||||||
StmtAudioExt = namedtuple("AudioExt", ["audio3", "audio4", "line_number"])
|
StmtAudioExt = namedtuple("AudioExt", ["audio3", "audio4", "line_number"])
|
||||||
StmtClipName = namedtuple("ClipName", ["name", "affect", "line_number"])
|
StmtClipName = namedtuple("ClipName", ["name", "affect", "line_number"])
|
||||||
StmtSourceFile = namedtuple("SourceFile", ["filename", "line_number"])
|
StmtSourceFile = namedtuple("SourceFile", ["filename", "line_number"])
|
||||||
|
StmtCdlSop = namedtuple("CdlSop", ['slope_r','slope_g','slope_b',
|
||||||
|
'offset_r', 'offset_g', 'offset_b',
|
||||||
|
'power_r', 'power_g', 'power_b',
|
||||||
|
'line_number'])
|
||||||
|
StmtCdlSat = namedtuple("SdlSat", ['value'])
|
||||||
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"])
|
||||||
|
|||||||
@@ -137,3 +137,11 @@ class TestParse(TestCase):
|
|||||||
pycmx.Transition.Cut)
|
pycmx.Transition.Cut)
|
||||||
self.assertEqual(event.edits[0].source_in,
|
self.assertEqual(event.edits[0].source_in,
|
||||||
"18:44:20:12")
|
"18:44:20:12")
|
||||||
|
|
||||||
|
|
||||||
|
def test_cdl(self):
|
||||||
|
with open("tests/edls/cdl_example01.edl", "r") as f:
|
||||||
|
edl = pycmx.parse_cmx3600(f)
|
||||||
|
for event in edl.events:
|
||||||
|
if event.number == 1:
|
||||||
|
...
|
||||||
|
|||||||
Reference in New Issue
Block a user