summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/reference_tree.ml29
-rw-r--r--src/reference_tree.mli4
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