From 08cf9b09f53f999cad569aad9547edf6d2bf819c Mon Sep 17 00:00:00 2001 From: Ryan Kavanagh Date: Mon, 8 Jun 2020 22:04:42 -0400 Subject: Fix parsing errors involving crlf vs eol --- gemini/mimeTextGemini.ml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'gemini/mimeTextGemini.ml') diff --git a/gemini/mimeTextGemini.ml b/gemini/mimeTextGemini.ml index 95f432b..385871f 100644 --- a/gemini/mimeTextGemini.ml +++ b/gemini/mimeTextGemini.ml @@ -110,9 +110,9 @@ struct | Error m -> raise (ParseError m) let header_parser = - lift (fun x -> H3 x) (string "###" *> skip_spaces *> take_till_cr) - <|> lift (fun x -> H2 x) (string "##" *> skip_spaces *> take_till_cr) - <|> lift (fun x -> H1 x) (string "#" *> skip_spaces *> take_till_cr) + lift (fun x -> H3 x) (string "###" *> skip_spaces *> take_till_eol) + <|> lift (fun x -> H2 x) (string "##" *> skip_spaces *> take_till_eol) + <|> lift (fun x -> H1 x) (string "#" *> skip_spaces *> take_till_eol) "gemini_header" let str_to_header_line = parse_string header_parser @@ -126,14 +126,14 @@ struct lift2 to_link (string "=>" *> skip_spaces *> take_till end_of_url) (* the optional name, will be "" if there is none *) - (skip_spaces *> take_till_cr) + (skip_spaces *> take_till_eol) "gemini_link" let str_to_link_line = parse_string link_parser (* Makes sure a line is actually a plain text line *) let text_parser = - let take_line = lift (fun s -> Text s) take_till_cr in + let take_line = lift (fun s -> Text s) take_till_eol in peek_char >>= function | Some '#' -> fail "text line cannot start with #" | Some '>' -> fail "text line cannot start with >" @@ -153,12 +153,12 @@ struct (* The gemini spec says that pre blocks are demarcated by lines that start with "```". It says nothing about what follows on these lines. *) - let pre_divider = string "```" *> take_till_cr *> return None + let pre_divider = string "```" *> take_till_eol *> return None let pre_line_parser = peek_string 3 >>= function | "```" -> fail "preformatted line cannot start with ```" - | _ -> lift (fun s -> Pre s) take_till_cr + | _ -> lift (fun s -> Pre s) take_till_eol let pre_block_parser = pre_divider *> many pre_line_parser <* pre_divider @@ -166,12 +166,12 @@ struct let str_to_pre_block = parse_string pre_block_parser let list_item_parser = - lift (fun x -> Ul x) (string "* " *> skip_spaces *> take_till_cr) + lift (fun x -> Ul x) (string "* " *> skip_spaces *> take_till_eol) let str_to_list_line = parse_string list_item_parser let quoted_parser = - lift (fun x -> Ul x) (string ">" *> skip_spaces *> take_till_cr) + lift (fun x -> Ul x) (string ">" *> skip_spaces *> take_till_eol) let str_to_quoted_line = parse_string quoted_parser @@ -180,7 +180,7 @@ struct plain text line whenever we get to the text parser. As a result, we don't need to recheck that it's actually a text line and not some special line. *) - let plain_text_parser = lift (fun s -> Text s) take_till_cr + let plain_text_parser = lift (fun s -> Text s) take_till_eol in fix (fun gemini -> lift2 List.append pre_block_parser gemini -- cgit v1.2.3