diff options
author | Daniil Baturin <daniil@baturin.org> | 2015-04-26 22:03:06 +0600 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2015-04-26 22:03:06 +0600 |
commit | 88652c2a4675afe9b83b3e9a175e2c39302de040 (patch) | |
tree | 488c83ff20513ac88049617885e7bd7f657cede0 /src | |
parent | de448723e5a9443f5df7f367e70990c58a9a04e3 (diff) | |
download | vyconf-88652c2a4675afe9b83b3e9a175e2c39302de040.tar.gz vyconf-88652c2a4675afe9b83b3e9a175e2c39302de040.zip |
Add an option to keep child order, will be used for rendering.
Diffstat (limited to 'src')
-rw-r--r-- | src/config_tree.ml | 2 | ||||
-rw-r--r-- | src/config_tree.mli | 1 | ||||
-rw-r--r-- | src/reference_tree.ml | 13 | ||||
-rw-r--r-- | src/reference_tree.mli | 1 |
4 files changed, 16 insertions, 1 deletions
diff --git a/src/config_tree.ml b/src/config_tree.ml index 289cf7e..e09761e 100644 --- a/src/config_tree.ml +++ b/src/config_tree.ml @@ -4,6 +4,7 @@ type config_node_data = { values: string list; comment: string; node_type: Vytree.node_type; + keep_order: bool; } type t = config_node_data Vytree.t @@ -12,6 +13,7 @@ let default_data = { values = []; comment = ""; node_type = Vytree.Other; + keep_order = false; } let make = Vytree.make default_data diff --git a/src/config_tree.mli b/src/config_tree.mli index 93a8b76..10fcdf6 100644 --- a/src/config_tree.mli +++ b/src/config_tree.mli @@ -4,6 +4,7 @@ type config_node_data = { values : string list; comment : string; node_type : Vytree.node_type; + keep_order : bool; } type t = config_node_data Vytree.t diff --git a/src/reference_tree.ml b/src/reference_tree.ml index 4cd124a..f7a2ffb 100644 --- a/src/reference_tree.ml +++ b/src/reference_tree.ml @@ -7,6 +7,7 @@ type ref_node_data = { multi: bool; valueless: bool; owner: string option; + keep_order: bool; } type t = ref_node_data Vytree.t @@ -24,6 +25,7 @@ let default_data = { multi = false; valueless = false; owner = None; + keep_order = false; } (* Loading from XML *) @@ -66,6 +68,14 @@ let data_from_xml d x = | _ -> raise (Bad_interface_definition "Malformed property tag") in Xml.fold aux d x +let get_keep_child_order xml = + match xml with + | Xml.Element ("tagNode", _, _) -> + (match (Util.find_xml_child "keepChildOrder" xml) with + | Some _ -> true + | None -> false) + | _ -> false + let rec insert_from_xml basepath reftree xml = match xml with | Xml.Element (tag, _, _) -> @@ -79,7 +89,8 @@ let rec insert_from_xml basepath reftree xml = let node_owner = try let o = Xml.attrib xml "owner" in Some o with _ -> None in - let data = {data with node_type = node_type; owner = node_owner} in + let keep_order = get_keep_child_order xml in + let data = {data with node_type = node_type; owner = node_owner; keep_order = keep_order} in let name = Xml.attrib xml "name" in let path = basepath @ [name] in let new_tree = Vytree.insert reftree path data in diff --git a/src/reference_tree.mli b/src/reference_tree.mli index 701adf0..5171203 100644 --- a/src/reference_tree.mli +++ b/src/reference_tree.mli @@ -7,6 +7,7 @@ type ref_node_data = { multi: bool; valueless: bool; owner: string option; + keep_order: bool; } exception Validation_error of string |