63 lines
1.8 KiB
OCaml
63 lines
1.8 KiB
OCaml
|
|
type color = string (* Simple_color.emacs_color *)
|
|
(* The filenames in this data structure are in readable format
|
|
* so one can use the layer generated by another user on
|
|
* his own repository (this also saves some space in the generated
|
|
* JSON file).
|
|
*)
|
|
type layer = {
|
|
title: string;
|
|
description: string;
|
|
files: (Common.filename * file_info) list;
|
|
kinds: (kind * color) list;
|
|
}
|
|
and file_info = {
|
|
micro_level: (int (* line *) * kind) list;
|
|
macro_level: (kind * float (* percentage of rectangle *)) list;
|
|
}
|
|
(* ugly: the first letter of the propery cannot be in uppercase because
|
|
* of the ugly way Ocaml.json_of_v currently works.
|
|
*)
|
|
and kind = string
|
|
|
|
val red_green_properties: (kind * color) list
|
|
val heat_map_properties: (kind * color) list
|
|
|
|
(* The filenames are in absolute path format in the index. *)
|
|
type layers_with_index = {
|
|
root: Common.dirname;
|
|
layers: (layer * bool (* is active *)) list;
|
|
|
|
micro_index:
|
|
(Common.filename, (int, color) Hashtbl.t) Hashtbl.t;
|
|
macro_index:
|
|
(Common.filename, (float * color) list) Hashtbl.t;
|
|
}
|
|
|
|
val build_index_of_layers:
|
|
root:Common.dirname ->
|
|
(layer * bool) list ->
|
|
layers_with_index
|
|
val has_active_layers: layers_with_index -> bool
|
|
|
|
(* save either in a (readable) json format or (fast) marshalled form
|
|
* depending on the extension of the filename
|
|
*)
|
|
val load_layer: Common.filename -> layer
|
|
val save_layer: layer -> Common.filename -> unit
|
|
|
|
(* helpers *)
|
|
val json_of_layer: layer -> Json_type.t
|
|
val layer_of_json: Json_type.t -> layer
|
|
|
|
val simple_layer_of_parse_infos:
|
|
root:Common.dirname ->
|
|
title:string ->
|
|
?description:string ->
|
|
(Parse_info.info * kind) list ->
|
|
(kind * color) list ->
|
|
layer
|
|
|
|
val stat_of_layer: layer -> (kind * int) list
|
|
|
|
val filter_layer: (Common.filename -> bool) -> layer -> layer
|