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@41: comment 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@22: and comment last_was_empty = adamc@23: match read_line () with adamc@22: | None -> () adamc@22: | Some line -> adamc@22: if String.length line >= 2 && line.[String.length line - 2] = '*' adamc@22: && line.[String.length line - 1] = ')' then adamc@22: initial last_was_empty adamc@22: else adamc@22: comment 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