0 | module Parser.Support
2 | import public Libraries.Text.Lexer.Tokenizer
3 | import public Libraries.Text.Lexer
4 | import public Libraries.Text.Parser
5 | import Libraries.Data.String.Extra
6 | import public Libraries.Text.PrettyPrint.Prettyprinter
11 | import public Parser.Support.Escaping
16 | fromLitError : OriginDesc -> LiterateError -> Error
17 | fromLitError origin (MkLitErr l c _) = LitFail (MkFC origin (l, c) (l, c + 1))
20 | fromLexError : OriginDesc -> (StopReason, Int, Int, String) -> Error
21 | fromLexError origin (ComposeNotClosing begin end, _, _, _)
22 | = LexFail (MkFC origin begin end) "Bracket is not properly closed."
23 | fromLexError origin (_, l, c, _)
24 | = LexFail (MkFC origin (l, c) (l, c + 1)) "Can't recognise token."
27 | fromParsingErrors : (Show token, Pretty ann token) =>
28 | OriginDesc -> List1 (ParsingError token) -> Error
29 | fromParsingErrors origin = ParseFail . (map fromError)
31 | fromError : ParsingError token -> (FC, String)
32 | fromError (Error msg Nothing)
33 | = (MkFC origin (0, 0) (0, 0), msg +> '.')
34 | fromError (Error msg (Just t))
35 | = let start = startBounds t;
end = endBounds t in
36 | let fc = if start == end
37 | then MkFC origin start (mapSnd (+1) start)
38 | else MkFC origin start end
42 | getCharLit : String -> Maybe Char
44 | = do e <- unescape 0 str
46 | then Just (assert_total (prim__strHead e))
47 | else if length e == 0