feat: Allow in-string expressions

This commit is contained in:
lwad 2024-03-08 10:40:49 +00:00
parent a17fd9b3df
commit 2459df464d
1 changed files with 32 additions and 24 deletions

56
main.py
View File

@ -68,40 +68,48 @@ def treeClimb(nodes, char):
return (True, char)
lineno = 0
try:
with open("/etc/nixos/components/programs/imunes.nix", "r") as file:
while (line := file.readline()):
lineno += 1
for char in line:
added = False
if last_opener == "\"":
if char == "\"":
if prev_char != "\\":
last_opener = treeDescend(nodes)
elif char == "{" and prev_char == "$" and prev_prev_char != "\\":
if last_opener == '"':
if char == "\\":
prev_sequential = sequential
sequential += 1
elif char == "{" and prev_char == "$" and prev_sequential % 2 != 1:
added, last_opener = treeClimb(nodes, char)
else:
if last_opener == "'":
if char == "'":
prev_sequential = sequential
sequential += 1
elif char == "{" and prev_char == "$" and prev_sequential % 3 != 2:
added, last_opener = treeClimb(nodes, char)
else:
if sequential % 3 == 2 and char != "$":
last_opener = treeDescend(nodes)
prev_sequential = sequential
sequential = 0
else:
if char == "\"":
added, last_opener = treeClimb(nodes, char)
elif char == "'" and prev_char == "'":
added, last_opener = treeClimb(nodes, char)
elif char in openers:
added, last_opener = treeClimb(nodes, char)
elif char in closers:
if char == '"' and sequential % 2 == 1:
last_opener = treeDescend(nodes)
prev_sequential = sequential
sequential = 0
elif last_opener == "'":
if char == "'":
prev_sequential = sequential
sequential += 1
elif char == "{" and prev_char == "$" and prev_sequential % 3 != 2:
added, last_opener = treeClimb(nodes, char)
else:
if sequential % 3 == 2 and char != "$":
last_opener = treeDescend(nodes)
prev_sequential = sequential
sequential = 0
else:
if char == '"':
added, last_opener = treeClimb(nodes, char)
elif char == "'" and prev_char == "'":
added, last_opener = treeClimb(nodes, char)
elif char in openers:
added, last_opener = treeClimb(nodes, char)
elif char in closers:
last_opener = treeDescend(nodes)
if not added:
getTopNode(nodes)[-1] += char
prev_char = char
# printTree(nodes)
pprint(nodes)