- 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]