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