module Text.Pandoc.Readers.Haddock
( readHaddock
) where
import Text.Pandoc.Builder
import Text.Pandoc.Options
import Text.Pandoc.Readers.Haddock.Lex
import Text.Pandoc.Readers.Haddock.Parse
readHaddock :: ReaderOptions
-> String
-> Pandoc
readHaddock _ s = Pandoc nullMeta blocks
where
blocks = case parseParas (tokenise s (0,0)) of
Left [] -> error "parse failure"
Left (tok:_) -> error $ "parse failure " ++ pos (tokenPos tok)
where pos (l, c) = "(line " ++ show l ++ ", column " ++ show c ++ ")"
Right x -> mergeLists (toList x)
mergeLists :: [Block] -> [Block]
mergeLists (BulletList xs : BulletList ys : blocks)
= mergeLists (BulletList (xs ++ ys) : blocks)
mergeLists (OrderedList _ xs : OrderedList a ys : blocks)
= mergeLists (OrderedList a (xs ++ ys) : blocks)
mergeLists (DefinitionList xs : DefinitionList ys : blocks)
= mergeLists (DefinitionList (xs ++ ys) : blocks)
mergeLists (x : blocks) = x : mergeLists blocks
mergeLists [] = []