diff options
-rw-r--r-- | src/reference_tree.ml | 29 | ||||
-rw-r--r-- | src/reference_tree.mli | 4 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/reference_tree.ml b/src/reference_tree.ml index 65725a8..a2c0f22 100644 --- a/src/reference_tree.ml +++ b/src/reference_tree.ml @@ -509,6 +509,35 @@ let refpath reftree path = | _, [] -> acc in aux [] path +let flag path = + let len = List.length path in + let aux p i = + Util.drop_last_n p (len - i - 1) + in + List.mapi (fun k _ -> aux path k) path + +let set_tag_data rtree ctree path = + let ext = Vytree.exists ctree path in + match ext with + | false -> ctree + | true -> + let set_tag rt ct p = + let refp = refpath rt p in + if is_tag rt refp && not (Config_tree.is_tag_value ct p) + then Config_tree.set_tag ct p true + else ct + in + List.fold_left (set_tag rtree) ctree (flag path) + +let set_leaf_data rtree ctree path = + let ext = Vytree.exists ctree path in + match ext with + | false -> ctree + | true -> + let refp = refpath rtree path in + if is_leaf rtree refp then Config_tree.set_leaf ctree path true + else ctree + let get_ceil_data f reftree path = let data_of_path d p = let data = Vytree.get_data reftree p in diff --git a/src/reference_tree.mli b/src/reference_tree.mli index b2942a3..9c583df 100644 --- a/src/reference_tree.mli +++ b/src/reference_tree.mli @@ -83,4 +83,8 @@ val refpath : t -> string list -> string list val get_ceil_data : (ref_node_data -> string option) -> t -> string list -> string option +val set_tag_data : t -> Config_tree.t -> string list -> Config_tree.t + +val set_leaf_data : t -> Config_tree.t -> string list -> Config_tree.t + val render_json : t -> string |