43 lines
1,006 B
Haskell
43 lines
1,006 B
Haskell
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE RankNTypes #-}
|
|
|
|
module Markdown.Data
|
|
( MListItem,
|
|
Parser,
|
|
MarkdownElement
|
|
( MHeading,
|
|
MParagraph,
|
|
MBold,
|
|
MItalic,
|
|
MBoldItalic,
|
|
MLink,
|
|
MLine,
|
|
MUnorderedList,
|
|
MOrderedList,
|
|
Only
|
|
),
|
|
)
|
|
where
|
|
|
|
import Data.Text
|
|
import Text.Parsec
|
|
|
|
-- very slightly modified version of https://github.com/tusharad/markdown-parser
|
|
data MarkdownElement
|
|
= MHeading Int MarkdownElement
|
|
| MParagraph MarkdownElement
|
|
| MBold MarkdownElement
|
|
| MItalic MarkdownElement
|
|
| MBoldItalic MarkdownElement
|
|
| MLink MarkdownElement Text
|
|
| MLine [MarkdownElement]
|
|
| MUnorderedList [MListItem]
|
|
| MOrderedList [MListItem]
|
|
| Raw Text -- HTML contained in the markdown
|
|
| Only Text -- Bottom of all types
|
|
deriving (Eq, Show)
|
|
|
|
data MListItem = MListItem MarkdownElement [MarkdownElement]
|
|
deriving (Eq, Show)
|
|
|
|
type Parser v = forall s u m. (Monad m, Stream s m Char) => ParsecT s u m v
|