spreadsheet

terminal spreadsheet application
git clone https://git.ce9e.org/spreadsheet.git

commit
fb9436fd1c7a17258b8932988870a413d0b32503
parent
d945d21dd639aa6b4bfb382d4d5e7598ce45dfe9
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-07-06 17:48
add shift_refs

Diffstat

M sheet/expression.py 20 ++++++++++++++++++++

1 files changed, 20 insertions, 0 deletions


diff --git a/sheet/expression.py b/sheet/expression.py

@@ -164,3 +164,23 @@ def unparse(expr):
  164   164                 sargs += unparse(args[i]) + comma
  165   165             sargs += unparse(args[-1])
  166   166         return f'{name}({sargs})'
   -1   167 
   -1   168 
   -1   169 def shift_refs(expr, d):
   -1   170     if expr[0] == 'ref':
   -1   171         x, y = expr[1]
   -1   172         if not expr[2][0]:
   -1   173             x += d[0]
   -1   174         if not expr[2][1]:
   -1   175             y += d[1]
   -1   176         return 'ref', (x, y), expr[2]
   -1   177     elif expr[0] in ['str', 'float', 'int']:
   -1   178         return expr
   -1   179     elif expr[0] == 'range':
   -1   180         return 'range', shift_refs(expr[1], d), shift_refs(expr[2], d)
   -1   181     elif expr[0] == 'brace':
   -1   182         return 'brace', shift_refs(expr[1], d)
   -1   183     elif expr[0] in '+-*/':
   -1   184         return expr[0], shift_refs(expr[1], d), shift_refs(expr[2], d), expr[3]
   -1   185     else:
   -1   186         return expr[0], [shift_refs(arg, d) for arg in expr[1]], expr[2]