let tokens_to_lines program =
    let rec lines_from_tokens rline rlines = function
        | NEWLINE::rest ->
            (match rline with
                | [] -> lines_from_tokens [] rlines rest
                | _  -> let (spacer, line) = spacing (List.rev rline) in
                                lines_from_tokens [] ((spacer, line, false)::rlines) rest)
        | COLON::rest ->
            (match rline with
                | [] -> lines_from_tokens [] rlines rest
                | _  -> let (spacer, line) = spacing (List.rev rline) in
                                lines_from_tokens [] ((spacer, line, true)::rlines) rest)
        | [] ->
            (match rline with
                | [] -> List.rev rlines
                | _  -> let (spacer, line) = spacing (List.rev rline) in
                                lines_from_tokens [] ((spacer, line, false)::rlines) [])
        | token::rest -> lines_from_tokens (token::rline) rlines rest in
    lines_from_tokens [] [] program