From ba88f20aa822eb5ea1e05eea0778d073ed81ef9f Mon Sep 17 00:00:00 2001 From: funwithcthulhu <29905917+funwithcthulhu@users.noreply.github.com> Date: Thu, 21 May 2026 20:43:40 -0700 Subject: [PATCH] Allow tab-indented EML templates --- src/eml/eml.ml | 4 ++-- test/expect/eml/tokens.ml | 32 +++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/eml/eml.ml b/src/eml/eml.ml index a2de1bbf..79d7cb39 100644 --- a/src/eml/eml.ml +++ b/src/eml/eml.ml @@ -146,8 +146,8 @@ struct let rec scan_whitespace stream columns = match Stream.peek stream with - | Some ' ' -> - Buffer.add_char lookahead_buffer ' '; + | Some ((' ' | '\t') as c) -> + Buffer.add_char lookahead_buffer c; Stream.junk stream; scan_whitespace stream (columns + 1) | _ -> diff --git a/test/expect/eml/tokens.ml b/test/expect/eml/tokens.ml index 6444cd69..d5fbd11c 100644 --- a/test/expect/eml/tokens.ml +++ b/test/expect/eml/tokens.ml @@ -5,7 +5,7 @@ -let show input = +let scan input = Eml.Location.reset (); let underlying = Stream.of_string input in @@ -13,14 +13,29 @@ let show input = try Some (Stream.next underlying) with _ -> None) in + Eml.Tokenizer.scan input_stream + +let show_with format input = try - input_stream - |> Eml.Tokenizer.scan + input + |> scan |> List.map Eml.Token.show + |> List.map format |> List.iter print_endline with Failure message -> print_endline message +let show input = + show_with (fun text -> text) input + +let escape_tabs text = + text + |> String.split_on_char '\t' + |> String.concat "\\t" + +let show_escaped_tabs input = + show_with escape_tabs input + let%expect_test _ = show ""; [%expect {| (1, 0) Code_block |}] @@ -91,6 +106,17 @@ let%expect_test _ = Newline Text {| |} |xxx}] +let%expect_test _ = + show_escaped_tabs "let foo =\n\t\n\t"; + [%expect {xxx| + (1, 0) Code_block + let foo = + + Options , 1 + Text {|\t|} + Newline + Text {|\t|} |xxx}] + let%expect_test _ = show "let foo =\n \n plain"; [%expect {xxx|