From: Philipp Gesang Date: Tue, 5 Dec 2017 10:55:24 +0000 (+0100) Subject: allow parent-less renumbering of CNF_VARs X-Git-Tag: v1.4~18^2~9 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=dacf2efd0db562f5734190070c423ed3479b7487;p=pyi2ncommon allow parent-less renumbering of CNF_VARs When more control is needed over the line numbers a CNF_VAR and its children are assigned, the *parent* linenumber can be used to pass an offset. Add a parameter *toplevel* to prevent the parent index from being set. --- diff --git a/src/cnfvar.py b/src/cnfvar.py index 75857c7..1a2ee34 100644 --- a/src/cnfvar.py +++ b/src/cnfvar.py @@ -530,21 +530,28 @@ def read_cnf(data): return {"cnf": cnf} -def renumber_vars(root, parent=None): +def renumber_vars(root, parent=None, toplevel=False): """ - renumber_vars -- Number cnfvars linearly. + renumber_vars -- Number cnfvars linearly. If *parent* is specified, + numbering will start at this offset. Also, the VAR *root* will be assigned + this number as a parent lineno unless *toplevel* is set (the root var in + a CNF tree obviously can’t have a parent). + + The *toplevel* parameter is useful when renumbering an existing variable + starting at a given offset without at the same time having that offset + assigned as a parent. """ if isinstance(root, dict): - root = root["cnf"] + root = cnf_root (root) i = parent or 0 for var in root: i += 1 var["number"] = i - if parent is not None: + if toplevel is False and parent is not None: var["parent"] = parent children = var.get("children", None) if children is not None: - i = renumber_vars(children, i) + i = renumber_vars(children, parent=i, toplevel=False) return i #