Specialize pattern and curve

This commit is contained in:
WQY\qiong
2023-03-15 21:29:33 +08:00
parent ed6f6daca0
commit 2f87d87233
3 changed files with 59 additions and 70 deletions

View File

@@ -1,5 +1,5 @@
from .project import *
from .database import ChangeSet
from .database import ChangeSet, write
from .sections import *
from .s1_title import inp_in_title_new
from .s2_junctions import inp_in_junction_new
@@ -91,25 +91,8 @@ _level_4 = {
_UNKNOWN = 'UNKNOWN'
class SectionRange:
def __init__(self) -> None:
start = 0
end = 0
class SectionOffset:
def __init__(self, s: str) -> None:
name = s
ranges: list[SectionRange] = []
def parse_file(project: str, inp: str) -> None:
# find section position
offset_list = []
offset: dict[str, list[tuple[int, int]]] = {}
for s in section_name:
offset[s] = []
def _get_offset(inp: str) -> dict[str, list[int]]:
offset: dict[str, list[int]] = {}
with open(inp) as f:
while True:
@@ -121,23 +104,39 @@ def parse_file(project: str, inp: str) -> None:
if line.startswith('['):
for s in section_name:
if line.startswith(f'[{s}'):
if s not in offset:
offset[s] = []
offset[s].append(f.tell())
break
return offset
def parse_file(project: str, inp: str) -> None:
offset = _get_offset(inp)
print(offset)
levels = _level_1 | _level_2 | _level_3 | _level_4
# parse the whole section rather than line
sections : dict[str, list[str]]= {}
for [s, t] in _handler.items():
if t[0] == _S:
sections[s] = []
levels = _level_1 | _level_2 | _level_3 | _level_4
pattern_desc_line = None
curve_type_desc_line = None
with open(inp) as f:
for s in levels:
is_s = _handler[s][0] == _S
if s not in offset:
continue
for o in offset[s]:
f.seek(o)
is_s = _handler[s][0] == _S
handler = _handler[s][1]
for ptr in offset[s]:
f.seek(ptr)
while True:
line = f.readline()
@@ -145,17 +144,44 @@ def parse_file(project: str, inp: str) -> None:
break
line = line.strip()
if line == '' or line.startswith('['):
break
if is_s:
sections[s].append(line)
else:
pass
if line.startswith(';'):
line = line.removeprefix(';')
if s == PATTERNS: # ;desc
pattern_desc_line = line
elif s == CURVES: # ;type: desc
curve_type_desc_line = line
continue
if s == PATTERNS:
if pattern_desc_line != None:
tokens = line.split()
write(project, f"insert into _pattern (id) values ('{tokens[0]}');")
pattern_desc_line = None
elif s == CURVES:
if curve_type_desc_line != None:
type_and_desc = curve_type_desc_line.split(':')
tokens = line.split()
write(project, f"insert into _curve (id, type) values ('{tokens[0]}', '{type_and_desc[0].strip()}');")
curve_type_desc_line = None
if handler != None:
handler(project, line)
f.seek(0)
if is_s and handler != None:
handler(project, sections[s])
def parse_inp(project: str, inp: str) -> None:
pass
parse_file(project, inp)
def read_inp_new(project: str, inp: str) -> bool:

View File

@@ -126,26 +126,10 @@ def inp_in_pattern(section: list[str]) -> ChangeSet:
return cs
def inp_in_pattern_new(name: str, section: list[str]) -> None:
descs = {}
patterns: list[str] = []
count = len(section)
for i in range(0, count):
if section[i].startswith(';'):
# this is description
next = i + 1
if next < count and section[next].startswith(';') == False:
next_tokens = section[next].split()
descs[next_tokens[0]] = section[i].removeprefix(';')
continue
tokens = section[i].split()
if tokens[0] not in patterns:
patterns.append(tokens[0])
write(name, f"insert into _pattern (id) values ('{tokens[0]}');")
for token in tokens[1:]:
write(name, f"insert into patterns (id, factor) values ('{tokens[0]}', {float(token)});")
def inp_in_pattern_new(name: str, line: str) -> None:
tokens = line.split()
for token in tokens[1:]:
write(name, f"insert into patterns (id, factor) values ('{tokens[0]}', {float(token)});")
def inp_out_pattern(name: str) -> list[str]:

View File

@@ -159,30 +159,9 @@ def inp_in_curve(section: list[str]) -> ChangeSet:
return cs
def inp_in_curve_new(name: str, section: list[str]) -> None:
types = {}
descs = {}
curves: list[str] = []
count = len(section)
for i in range(0, count):
if section[i].startswith(';'):
# ;type: desc
type_plus_desc = section[i].removeprefix(';')
type_plus_desc_tokens = type_plus_desc.split(':')
next = i + 1
if next < count and section[next].startswith(';') == False:
next_tokens = section[next].split()
types[next_tokens[0]] = type_plus_desc_tokens[0].strip().upper()
if len(type_plus_desc_tokens) > 1:
descs[next_tokens[0]] = type_plus_desc_tokens[1].strip()
continue
tokens = section[i].split()
if tokens[0] not in curves:
curves.append(tokens[0])
write(name, f"insert into _curve (id, type) values ('{tokens[0]}', '{types[tokens[0]]}');")
write(name, f"insert into curves (id, x, y) values ('{tokens[0]}', {float(tokens[1])}, {float(tokens[2])});")
def inp_in_curve_new(name: str, line: str) -> None:
tokens = line.split()
write(name, f"insert into curves (id, x, y) values ('{tokens[0]}', {float(tokens[1])}, {float(tokens[2])});")
def inp_out_curve(name: str) -> list[str]: