2 module ET = RecommTypes
8 let k_final b ws1 ws2 = b, ws1, ws2
12 r: ET.srcs; (* reversed result *)
28 | ET.Line _ :: _ -> false
34 "||A|| A project by Andrea Asperti ";
37 "||T|| The HELM team. ";
38 "||A|| http://helm.cs.unibo.it ";
40 "\\ / This file is distributed under the terms of the ";
41 "v GNU General Public License Version 2 ";
53 let no_color = "\x1B[0m"
54 let black = "\x1B[30m"
55 let sky = "\x1B[38;2;0;96;128m"
57 let prune = "\x1B[38;2;96;0;128m"
61 if !bw then Printf.printf "%S\n" s else
62 Printf.printf "%s%S%s\n" color s no_color
64 let rec recomm srcs st =
68 | ET.Line _ as hd :: tl ->
69 recomm tl @@ add hd @@ st
70 | ET.Text _ as hd :: tl ->
71 recomm tl @@ add hd @@ st
72 | ET.Mark s as hd :: tl ->
73 if !log_m then log red s;
74 recomm tl @@ add hd @@ st
75 | ET.Key (s1, s2) as hd :: tl ->
76 if middle st then Printf.eprintf "middle: %S\n" s1;
77 if !log_k then log prune (s1^s2);
78 recomm tl @@ add hd @@ st
79 | ET.Title ss as hd :: tl ->
80 if middle st then Printf.eprintf "middle: TITLE\n";
81 let b, ss1, ss2 = !c_line k_final false [] ss in
83 if ss2 = [] then ss2 else "*" :: ss2
85 let ss = List.rev_append ss1 ss2 in
86 let s = String.concat " " ss in
87 if !log_t then log blue s;
88 recomm tl @@ add hd @@ st
89 | ET.Slice ss as hd :: tl ->
90 if middle st then Printf.eprintf "middle: Section\n";
91 let b, ss1, ss2 = !s_line k_final false [] ss in
93 if ss2 = [] then ss2 else "*" :: ss2
95 let ss = List.rev_append ss1 ss2 in
96 let s = String.capitalize_ascii (String.concat " " ss) in
97 if !log_s then log sky s;
98 recomm tl @@ add hd @@ st
99 | ET.Other (_, s, _) as hd :: tl ->
100 if !log_o && not (Array.mem s mute_o) then log black s;
101 recomm tl @@ add hd @@ st
103 let recomm_srcs srcs =
104 let st = recomm srcs @@ init () in
107 let register_c = ES.register c_line
109 let register_s = ES.register s_line