Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix end of line parsing on Windows #294

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions lib/lexer_mdx.mll
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,21 @@ let labels l =
failwith msg
}

let eol = '\n' | eof
let ws = ' ' | '\t'
let eol = '\n' | '\r' '\n' | eof
Julow marked this conversation as resolved.
Show resolved Hide resolved
let ws = [' ' '\t']
gpetiot marked this conversation as resolved.
Show resolved Hide resolved

let until_eol = [^'\n' '\r']
Julow marked this conversation as resolved.
Show resolved Hide resolved
let until_ws = [^' ' '\t']
let until_ws_or_eol = [^' ' '\t' '\n' '\r']

rule text section = parse
| eof { [] }
| ("#"+ as n) " " ([^'\n']* as str) eol
| ("#"+ as n) " " (until_eol* as str) eol
{ let section = (String.length n, str) in
newline lexbuf;
`Section section :: text (Some section) lexbuf }
| ( "<!--" ws* "$MDX" ws* ([^' ' '\n']* as label_cmt) ws* "-->" ws* eol? )?
"```" ([^' ' '\n']* as h) ws* ([^'\n']* as legacy_labels) eol
| ( "<!--" ws* "$MDX" ws* (until_ws* as label_cmt) ws* "-->" ws* eol? )?
"```" (until_ws_or_eol* as h) ws* (until_eol* as legacy_labels) eol
{ let header = Block.Header.of_string h in
let contents = block lexbuf in
let labels, legacy_labels =
Expand Down Expand Up @@ -63,7 +67,7 @@ rule text section = parse
List.iter (fun _ -> newline lexbuf) errors;
newline lexbuf);
`Block block :: text section lexbuf }
| "<!--" ws* "$MDX" ws* ([^' ' '\n']* as label_cmt) ws* "-->" ws* eol
| "<!--" ws* "$MDX" ws* (until_ws* as label_cmt) ws* "-->" ws* eol
{ let labels = labels label_cmt in
newline lexbuf;
let loc = Location.curr lexbuf in
Expand All @@ -73,24 +77,24 @@ rule text section = parse
| Error (`Msg msg) -> failwith msg
in
`Block block :: text section lexbuf }
| ([^'\n']* as str) eol
| (until_eol* as str) eol
{ newline lexbuf;
`Text str :: text section lexbuf }

and block = parse
| eof | "```" ws* eol { [] }
| ([^'\n'] * as str) eol { str :: block lexbuf }
| (until_eol* as str) eol { str :: block lexbuf }

and error_block = parse
| "```mdx-error" ws* eol { block lexbuf }

and cram_text section = parse
| eof { [] }
| ("#"+ as n) " " ([^'\n']* as str) eol
| ("#"+ as n) " " (until_eol* as str) eol
{ let section = (String.length n, str) in
newline lexbuf;
`Section section :: cram_text (Some section) lexbuf }
| " " ([^'\n']* as first_line) eol
| " " (until_eol* as first_line) eol
{ let header = Some (Block.Header.Shell `Sh) in
let requires_empty_line, contents = cram_block lexbuf in
let contents = first_line :: contents in
Expand All @@ -109,7 +113,7 @@ and cram_text section = parse
in
`Block block
:: (if requires_empty_line then `Text "" :: rest else rest) }
| "<-- non-deterministic" ws* ([^'\n']* as choice) eol
| "<-- non-deterministic" ws* (until_eol* as choice) eol
{ let header = Some (Block.Header.Shell `Sh) in
let requires_empty_line, contents = cram_block lexbuf in
let labels =
Expand All @@ -132,14 +136,14 @@ and cram_text section = parse
in
`Block block
:: (if requires_empty_line then `Text "" :: rest else rest) }
| ([^'\n']* as str) eol
| (until_eol* as str) eol
{ newline lexbuf;
`Text str :: cram_text section lexbuf }

and cram_block = parse
| eof { false, [] }
| eol { newline lexbuf; true, [] }
| " " ([^'\n'] * as str) eol
| " " (until_eol* as str) eol
{ let requires_empty_line, lst = cram_block lexbuf in
requires_empty_line, str :: lst }

Expand Down