@@ -129,6 +129,13 @@ parseHtmlContentWithAttrs tag parser = do
129129parseHtmlContent :: PandocMonad m => String -> MuseParser m a -> MuseParser m [a]
130130parseHtmlContent tag p = fmap snd (parseHtmlContentWithAttrs tag p)
131131
132+commonPrefix :: String -> String -> String
133+commonPrefix _ [] = []
134+commonPrefix [] _ = []
135+commonPrefix (x:xs) (y:ys)
136+ | x == y = x : commonPrefix xs ys
137+ | otherwise = []
138+
132139--
133140-- directive parsers
134141--
@@ -365,7 +372,7 @@ lineBlock = try $ do
365372listLine :: PandocMonad m => Int -> MuseParser m String
366373listLine markerLength = try $ do
367374 indentWith markerLength
368− anyLineNewline
375+ manyTill anyChar eol
369376
370377withListContext :: PandocMonad m => MuseParser m a -> MuseParser m a
371378withListContext p = do
@@ -379,7 +386,7 @@ withListContext p = do
379386listContinuation :: PandocMonad m => Int -> MuseParser m [String]
380387listContinuation markerLength = try $ do
381388 result <- many1 $ listLine markerLength
382− blank <- option id ((++ ["\n"]) <$ blankline)
389+ blank <- option id ((++ [""]) <$ blankline)
383390 return $ blank result
384391
385392listStart :: PandocMonad m => MuseParser m Int -> MuseParser m Int
@@ -394,17 +401,18 @@ listStart marker = try $ do
394401dropSpacePrefix :: [String] -> [String]
395402dropSpacePrefix lns =
396403 map (drop maxIndent) lns
397− where maxIndent = minimum $ map (length . takeWhile (== ' ')) lns
404+ where flns = filter (\s -> not $ all (== ' ') s) lns
405+ maxIndent = if null flns then 0 else length $ takeWhile (== ' ') $ foldl1 commonPrefix flns
398406
399407listItemContents :: PandocMonad m => Int -> MuseParser m (F Blocks)
400408listItemContents markerLength = do
401− firstLine <- anyLineNewline
409+ firstLine <- manyTill anyChar eol
402410 restLines <- many $ listLine markerLength
403− blank <- option id ((++ ["\n"]) <$ blankline)
411+ blank <- option id ((++ [""]) <$ blankline)
404412 let first = firstLine : blank restLines
405413 rest <- many $ listContinuation markerLength
406414 let allLines = concat (first : rest)
407− parseFromString (withListContext parseBlocks) $ concat (dropSpacePrefix allLines) ++ "\n"
415+ parseFromString (withListContext parseBlocks) $ unlines (dropSpacePrefix allLines)
408416
409417listItem :: PandocMonad m => MuseParser m Int -> MuseParser m (F Blocks)
410418listItem start = try $ do
@@ -444,8 +452,8 @@ definitionListItem = try $ do
444452 string "::"
445453 firstLine <- manyTill anyChar eol
446454 restLines <- manyTill anyLine endOfListItemElement
447− let lns = (dropWhile (== ' ') firstLine) : dropSpacePrefix restLines
448− lineContent <- parseFromString (withListContext parseBlocks) $ unlines lns ++ "\n"
455+ let lns = dropWhile (== ' ') firstLine : dropSpacePrefix restLines
456+ lineContent <- parseFromString (withListContext parseBlocks) $ unlines lns
449457 pure $ do lineContent' <- lineContent
450458 term' <- term
451459 pure (term', [lineContent'])