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