0 | module Text.Markdown.Lexer
7 | import Text.Markdown.String
8 | import public Text.Markdown.Tokens
13 | markdownTokenMap : TokenMap MarkdownToken
14 | markdownTokenMap = toTokenMap $
15 | [ (horizontalRules, MdHorizontalRules)
16 | , (blankLine, BlankLine)
17 | , (codeFence, MdCodeBlock)
19 | , (headingSym, HeadingSym)
20 | , (italicsSym, ItalicsSym)
21 | , (boldSym, BoldSym)
22 | , (imageSym, ImageSym)
24 | , (htmlCloseTag, HtmlCloseTag)
25 | , (htmlOpenTag, HtmlOpenTag)
26 | , (newline, MdNewLine)
31 | combineText : List MarkdownToken -> List MarkdownToken
33 | combineText (el :: rest) =
35 | init = (the (List1 MarkdownToken, MarkdownToken) (el ::: [], el))
37 | toList $
reverse $
fst $
(foldl accumulate init rest)
39 | accumulate : (List1 MarkdownToken, MarkdownToken) -> MarkdownToken -> (List1 MarkdownToken, MarkdownToken)
40 | accumulate (acc0 ::: acc1, last) el =
42 | (Tok MdText a, Tok MdText b) =>
44 | combined = Tok MdText (a ++ b)
46 | (combined ::: acc1, combined)
48 | (el ::: acc0 :: acc1, el)
51 | lexMarkdown : String -> Maybe (List MarkdownToken)
53 | = case lex markdownTokenMap str of
54 | (tokens, _, _, "") => Just $
combineText $
map (\tok => tok.val) tokens