let merge_lines program_lines =
let rec lines_merge rlines = function
| ((n1, _, _) as line1)::((n2, _, _) as line2)::rest when n1 >= n2 -> lines_merge (line1::rlines) (line2::rest)
| (n, line1, false)::(_, line2, colon)::rest -> lines_merge rlines ((n, line1@line2, colon)::rest)
| ((_, _, true) as line)::rest -> lines_merge (line::rlines) rest
| line::[] -> lines_merge (line::rlines) []
| [] -> List.rev rlines in
lines_merge [] program_lines