#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright © 2017 Michael J. Hayford
""" Support for reading CODE V .seq files
.. codeauthor: Michael J. Hayford
"""
import re
[docs]def tokenize_command(cmd):
tkns = re.findall(r"[^'\"\s]\S*|\".+?\"|'.+?'", cmd)
tokens = []
for t in tkns:
if t[:1] == '"':
tokens.append(t.strip('"'))
elif t[:1] == "'":
tokens.append(t.strip("'"))
else:
tokens.append(t)
return tokens
[docs]def next_line(it):
ln = next(it)
contIndex = ln.rfind('&')
if contIndex >= 0:
return ln[:contIndex] + next_line(it)
else:
return ln
[docs]def read_seq_buffer(inputLines, tokenize=True):
inputs = []
it = iter(inputLines)
while True:
try:
ln = next_line(it)
ln = strip_comments(ln)
lnList = ln.split(';')
for line in lnList:
line = line.strip()
if len(line) > 0:
if tokenize:
cmd = tokenize_command(line)
inputs.append(cmd)
else:
inputs.append(line)
except StopIteration:
break
return inputs
[docs]def read_seq_file(filename, tokenize=True):
file = open(filename, 'r')
inpt = file.read()
file.close()
inputLines = inpt.splitlines()
return read_seq_buffer(inputLines, tokenize)