aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xauto-auto-complete.py42
-rw-r--r--example4
2 files changed, 43 insertions, 3 deletions
diff --git a/auto-auto-complete.py b/auto-auto-complete.py
index 53b455a..0865bca 100755
--- a/auto-auto-complete.py
+++ b/auto-auto-complete.py
@@ -98,6 +98,9 @@ class Parser:
else:
stack[stackptr] = []
elif (c == ')') and (quote is None):
+ if buf is not None:
+ stack[stackptr].append(buf)
+ buf = None
if stackptr == 0:
return stack[0]
stackptr -= 1
@@ -117,7 +120,43 @@ class Parser:
buf += c
raise Exception('premature end of file')
-
+
+
+ '''
+ Simplifies a tree
+
+ @param tree:list<↑|str> The tree
+ '''
+ @staticmethod
+ def simplify(tree):
+ program = tree[0]
+ stack = [tree]
+ while len(stack) > 0:
+ node = stack.pop()
+ new = []
+ edited = False
+ for item in node:
+ if isinstance(item, list):
+ if item[0] == 'multiple':
+ master = item[1]
+ for slave in item[2:]:
+ new.append([master] + slave)
+ edited = True
+ elif item[0] == 'case':
+ for alt in item[1:]:
+ if alt[0] == program:
+ new.append(alt[1])
+ break
+ edited = True
+ else:
+ new.append(item)
+ else:
+ new.append(item)
+ if edited:
+ node[:] = new
+ for item in node:
+ if isinstance(item, list):
+ stack.append(item)
'''
@@ -166,6 +205,7 @@ if __name__ == '__main__':
with open(source, 'rb') as file:
source = file.read().decode('utf8', 'replace')
source = Parser.parse(source)
+ Parser.simplify(source)
print(source)
diff --git a/example b/example
index 63915de..b825641 100644
--- a/example
+++ b/example
@@ -49,8 +49,8 @@
(no-exec ls "'/usr/share/ponysay/balloons'" (case (ponysay .say) (ponythink .think)))
)
(suggestion wrap (verbatim none inhertit 100 60)
- (calc (pipe (stty size)
- (cut -d ' ' -f 2)
+ (calc (pipe (exec stty size)
+ (exec cut -d ' ' -f 2)
) - 10
)
)