Marker implementation and tests

This commit is contained in:
Jamie Hardt
2019-10-07 00:11:11 -07:00
parent 97043d0284
commit c9f1f57362
7 changed files with 69 additions and 297 deletions

View File

@@ -1,2 +1,2 @@
from .ptuls_grammar import protools_text_export_grammar
from .ptuls_parser_visitor import PTTextVisitor
from .ptuls_parser_visitor import DictionaryParserVisitor

View File

@@ -60,7 +60,7 @@ protools_text_export_grammar = Grammar(
markers_column_header = "# " fs "LOCATION " fs "TIME REFERENCE " fs
"UNITS " fs "NAME " fs "COMMENTS" rs
marker_record = string_value fs string_value fs string_value fs
marker_record = integer_value isp fs timecode_value fs integer_value isp fs
string_value fs string_value fs string_value rs
fs = "\t"

View File

@@ -1,20 +1,13 @@
from parsimonious.nodes import NodeVisitor
class PTTextVisitor(NodeVisitor):
class DictionaryParserVisitor(NodeVisitor):
def visit_document(self, node, visited_children):
files = None
clips = None
plugins = None
tracks = None
markers = None
if isinstance(visited_children[1] ,list):
files = visited_children[1][0]
if isinstance(visited_children[2], list):
clips = visited_children[2][0]
if isinstance(visited_children[3], list):
plugins = visited_children[3][0]
if isinstance(visited_children[4], list):
tracks = visited_children[4][0]
files = next(iter(visited_children[1]), None)
clips = next(iter(visited_children[2]), None)
plugins = next(iter(visited_children[3]), None)
tracks = next(iter(visited_children[4]), None)
markers = next(iter(visited_children[5]), None)
return dict(header=visited_children[0],
files=files,
@@ -34,33 +27,37 @@ class PTTextVisitor(NodeVisitor):
count_files=visited_children[32])
def visit_files_section(self, node, visited_children):
return list(map(lambda child: {'filename': child[0], 'path': child[2]}, visited_children[2]))
return list(map(lambda child: dict(filename=child[0], path=child[2]), visited_children[2]))
def visit_clips_section(self, node, visited_children):
return list(map(lambda child: {'clip_name': child[0], 'file': child[2], 'channel': child[5]},
return list(map(lambda child: dict(clip_name=child[0], file=child[2], channel=child[5]),
visited_children[2]))
def visit_plugin_listing(self, node, visited_children):
return list(map(lambda child: {'manufacturer': child[0], 'plugin_name': child[2],
'version': child[4], 'format': child[6], 'stems': child[8],
'count_instances': child[10]},
return list(map(lambda child: dict(manufacturer=child[0],
plugin_name=child[2],
version=child[4],
format=child[6],
stems=child[8],
count_instances=child[10]),
visited_children[2]))
def visit_track_block(self, node, visited_children):
track_header, track_clip_list = visited_children
clips = []
for clip in visited_children[1]:
for clip in track_clip_list:
if clip[0] != None:
clips.append(clip[0])
plugins = []
for plugin in visited_children[0][17]:
for plugin in track_header[17]:
plugins.append(plugin[1])
return dict(
name=visited_children[0][2],
comments=visited_children[0][6],
user_delay_samples=visited_children[0][10],
state=visited_children[0][14],
name=track_header[2],
comments=track_header[6],
user_delay_samples=track_header[10],
state=track_header[14],
plugins=plugins,
clips=clips
)
@@ -73,15 +70,14 @@ class PTTextVisitor(NodeVisitor):
if isinstance(visited_children[14], list):
timestamp = visited_children[14][0][0]
return {'channel': visited_children[0],
'event': visited_children[3],
'clip_name': visited_children[6],
'start_time': visited_children[8],
'end_time': visited_children[10],
'duration': visited_children[12],
'timestamp' : timestamp,
'state': visited_children[15]
}
return dict(channel=visited_children[0],
event=visited_children[3],
clip_name=visited_children[6],
start_time=visited_children[8],
end_time=visited_children[10],
duration=visited_children[12],
timestamp=timestamp,
state=visited_children[15])
def visit_track_state_list(self, node, visited_children):
states = []
@@ -94,7 +90,21 @@ class PTTextVisitor(NodeVisitor):
return node.text
def visit_markers_listing(self, node, visited_children):
return 'Markers'
markers = []
for marker in visited_children[2]:
markers.append(marker)
return markers
def visit_marker_record(self, node, visited_children):
return dict(number=visited_children[0],
location=visited_children[3],
time_reference=visited_children[5],
units=visited_children[8],
name=visited_children[10],
comments=visited_children[12])
def visit_formatted_clip_name(self, node, visited_children):
return visited_children[1].text