From b2d0a727d2f9393ff602492fab17c2fa53adf4df Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Thu, 17 Nov 2022 18:33:49 +0800 Subject: [PATCH] Parse [LABELS] --- api/s26_labels.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/api/s26_labels.py b/api/s26_labels.py index af5d01d..8f3ea81 100644 --- a/api/s26_labels.py +++ b/api/s26_labels.py @@ -95,5 +95,38 @@ def delete_label_cache(name: str, cs: ChangeSet) -> SqlChangeSet: return SqlChangeSet(redo_sql, undo_sql, redo_cs, undo_cs) -def delete_label(name: str, cs: ChangeSet) -> ChangeSet: - return execute_command(name, delete_label_cache(name, cs)) +class InpLabel: + def __init__(self, line: str) -> None: + tokens = line.split() + + num = len(tokens) + has_desc = tokens[-1].startswith(';') + num_without_desc = (num - 1) if has_desc else num + + self.x = float(tokens[0]) + self.y = float(tokens[1]) + self.label = str(tokens[2]) + self.node = str(tokens[3]) if num >= 4 else None + + +def inp_in_label(section: list[str]) -> ChangeSet: + cs = ChangeSet() + for s in section: + # skip comment + if s.startswith(';'): + continue + obj = InpLabel(s) + cs.append({'operation': API_ADD, 'type': 'label', 'x': obj.x, 'y': obj.y, 'label': obj.label, 'node': obj.node}) + return cs + + +def inp_out_label(name: str) -> list[str]: + lines = [] + objs = read_all(name, 'select * from labels') + for obj in objs: + x = obj['x'] + y = obj['y'] + label = obj['label'] + node = obj['node'] if obj['node'] != None else '' + lines.append(f'{x} {y} {label} {node}') + return lines