adamc@23: let read_line () = adamc@22: try adamc@23: Some (read_line ()) adamc@22: with End_of_file -> None adamc@22: adamc@22: let rec initial last_was_empty = adamc@23: match read_line () with adamc@22: | None -> () adamc@22: | Some "(* begin thide *)" -> thide last_was_empty adamc@22: | Some "" -> adamc@22: if not (last_was_empty) then adamc@22: print_newline (); adamc@22: initial true adamc@22: | Some line -> adamc@41: let idx = try Some (String.index line '(') with Not_found -> None in adamc@41: match idx with adamc@41: | Some idx -> adamc@49: if String.length line > idx+1 && line.[idx+1] = '*' adamc@49: && not (String.length line > idx+4 && String.sub line (idx+2) 3 = " EX") then adamc@41: if line.[String.length line - 2] = '*' && line.[String.length line - 1] = ')' then adamc@41: initial last_was_empty adamc@41: else adamc@77: comment 1 last_was_empty adamc@41: else begin adamc@41: print_endline line; adamc@41: initial false adamc@41: end adamc@41: | None -> adamc@41: print_endline line; adamc@41: initial false adamc@22: adamc@77: and comment count last_was_empty = adamc@23: match read_line () with adamc@22: | None -> () adamc@22: | Some line -> adamc@77: if String.length line >= 2 && line.[0] = '(' && line.[1] = '*' then adamc@77: if String.length line >= 2 && line.[String.length line - 2] = '*' adamc@77: && line.[String.length line - 1] = ')' then adamc@77: comment count last_was_empty adamc@77: else adamc@77: comment (count+1) last_was_empty adamc@77: else if String.length line >= 2 && line.[String.length line - 2] = '*' adamc@22: && line.[String.length line - 1] = ')' then adamc@77: if try adamc@77: let idx = String.index line '(' in adamc@77: idx < String.length line - 1 && line.[idx + 1] = '*' adamc@77: with Not_found -> false then adamc@77: comment count last_was_empty adamc@77: else if count = 1 then adamc@77: initial last_was_empty adamc@77: else adamc@77: comment (count-1) last_was_empty adamc@22: else adamc@77: comment count last_was_empty adamc@22: adamc@22: and thide last_was_empty = adamc@23: match read_line () with adamc@22: | None -> () adamc@22: | Some "(* end thide *)" -> initial last_was_empty adamc@22: | Some _ -> thide last_was_empty adamc@22: adamc@22: let () = initial false