@@ -422,13 +422,17 @@ withListContext p = do
422 updateState (\st -> st {stateParserContext = oldContext})
422 updateState (\st -> st {stateParserContext = oldContext})
423 return parsed
423 return parsed
425+listItemContents' :: PandocMonad m => Int -> MuseParser m (F Blocks)
426+listItemContents' col = do
427+ first <- try $ withListContext parseBlock
428+ rest <- many $ try (skipMany blankline >> indentWith col >> withListContext parseBlock)
429+ return $ mconcat (first : rest)
425listItemContents :: PandocMonad m => MuseParser m (F Blocks)
431listItemContents :: PandocMonad m => MuseParser m (F Blocks)
426listItemContents = do
432listItemContents = do
427 pos <- getPosition
433 pos <- getPosition
428 let col = sourceColumn pos - 1
434 let col = sourceColumn pos - 1
429− first <- try $ withListContext parseBlock
435+ listItemContents' col
430− rest <- many $ try (skipMany blankline >> indentWith col >> withListContext parseBlock)
431− return $ mconcat (first : rest)
433listItem :: PandocMonad m => Int -> MuseParser m () -> MuseParser m (F Blocks)
437listItem :: PandocMonad m => Int -> MuseParser m () -> MuseParser m (F Blocks)
434listItem n p = try $ do
438listItem n p = try $ do
@@ -466,25 +470,19 @@ orderedList = try $ do
467definitionListItem :: PandocMonad m => MuseParser m (F (Inlines, [Blocks]))
471definitionListItem :: PandocMonad m => MuseParser m (F (Inlines, [Blocks]))
468definitionListItem = try $ do
472definitionListItem = try $ do
469− rawTerm <- termParser
473+ guardDisabled Ext_amuse <|> void spaceChar -- Initial space is required by Amusewiki, but not Emacs Muse
476+ rawTerm <- many1Till (noneOf "\n") (lookAhead (void (try (spaceChar >> string "::"))))
470 term <- parseFromString (trimInlinesF . mconcat <$> many inline) rawTerm
477 term <- parseFromString (trimInlinesF . mconcat <$> many inline) rawTerm
471 many1 spaceChar
478 many1 spaceChar
472 string "::"
479 string "::"
473− firstLine <- manyTill anyChar eol
480+ void spaceChar <|> lookAhead eol
474− restLines <- manyTill anyLine endOfListItemElement
481+ contents <- listItemContents' $ sourceColumn pos
475− let lns = dropWhile (== ' ') firstLine : restLines
482+ optionMaybe blankline
476− lineContent <- parseFromString (withListContext parseBlocks) $ unlines lns
477− pure $ do lineContent' <- lineContent
483+ pure $ do lineContent' <- contents
478 term' <- term
484 term' <- term
479 pure (term', [lineContent'])
485 pure (term', [lineContent'])
481− termParser = (guardDisabled Ext_amuse <|> void spaceChar) >> -- Initial space is required by Amusewiki, but not Emacs Muse
483− many1Till (noneOf "\n") (lookAhead (void (try (spaceChar >> string "::"))))
484− endOfInput = lookAhead $ try $ skipMany blankline >> skipSpaces >> eof
485− twoBlankLines = try $ blankline >> skipMany1 blankline
486− newDefinitionListItem = try $ void termParser
487− endOfListItemElement = lookAhead $ endOfInput <|> newDefinitionListItem <|> twoBlankLines
489definitionListItems :: PandocMonad m => MuseParser m (F [(Inlines, [Blocks])])
487definitionListItems :: PandocMonad m => MuseParser m (F [(Inlines, [Blocks])])
490definitionListItems = sequence <$> many1 definitionListItem
488definitionListItems = sequence <$> many1 definitionListItem