git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: fix parsing of nested definition lists
commit22b69b557ecd9a86caa8628b9a395bdd86b55035 authorAlexander Krotov <ilabdsf@gmail.com> dateFri 19 Jan 2018, 16:05 (9 years ago) parent62c395d
2 files changed+21−12
src/Text/Pandoc/Readers/Muse.hs+10−11 test/Tests/Readers/Muse.hs+11−1
src/Text/Pandoc/Readers/Muse.hs+10−11
@@ -467,26 +467,25 @@ orderedList = try $ do
467467 rest <- many $ listItem (col - 1) (void (orderedListMarker style delim))
468468 return $ B.orderedListWith p <$> sequence (first : rest)
469469
470−definitionListItem :: PandocMonad m => MuseParser m (F (Inlines, [Blocks]))
471−definitionListItem = try $ do
472− many spaceChar
470+definitionListItem :: PandocMonad m => Int -> MuseParser m (F (Inlines, [Blocks]))
471+definitionListItem n = try $ do
472+ count n spaceChar
473473 pos <- getPosition
474− (guardDisabled Ext_amuse) <|> (guard (sourceColumn pos /= 1)) -- Initial space is required by Amusewiki, but not Emacs Muse
475474 term <- trimInlinesF . mconcat <$> manyTill (choice inlineList) (string "::")
476475 void spaceChar <|> lookAhead eol
477476 contents <- listItemContents' $ sourceColumn pos
478− optionMaybe blankline
479477 pure $ do lineContent' <- contents
480478 term' <- term
481479 pure (term', [lineContent'])
482480
483−definitionListItems :: PandocMonad m => MuseParser m (F [(Inlines, [Blocks])])
484−definitionListItems = sequence <$> many1 definitionListItem
485−
486481definitionList :: PandocMonad m => MuseParser m (F Blocks)
487−definitionList = do
488− items <- definitionListItems
489− return $ B.definitionList <$> items
482+definitionList = try $ do
483+ many spaceChar
484+ pos <- getPosition
485+ (guardDisabled Ext_amuse) <|> (guard (sourceColumn pos /= 1)) -- Initial space is required by Amusewiki, but not Emacs Muse
486+ first <- definitionListItem 0
487+ rest <- many $ try (optionMaybe blankline >> definitionListItem (sourceColumn pos - 1))
488+ return $ B.definitionList <$> sequence (first : rest)
490489
491490--
492491-- tables
test/Tests/Readers/Muse.hs+11−1
@@ -960,9 +960,19 @@ tests =
960960 definitionList [ ("Term1", [ para "This is a first definition\nAnd it has two lines;\nno, make that three."])
961961 , ("Term2", [ para "This is a second definition"])
962962 ])
963− , "Nested definition list" =:
963+ , "One-line nested definition list" =:
964964 " Foo :: bar :: baz" =?>
965965 definitionList [ ("Foo", [ definitionList [ ("bar", [ para "baz" ])]])]
966+ , "Nested definition list" =:
967+ T.unlines
968+ [ " First :: Second :: Third"
969+ , " Fourth :: Fifth :: Sixth"
970+ , " Seventh :: Eighth"
971+ ] =?>
972+ definitionList [ ("First", [ definitionList [ ("Second", [ para "Third" ]),
973+ ("Fourth", [ definitionList [ ("Fifth", [ para "Sixth"] ) ] ] ) ] ] )
974+ , ("Seventh", [ para "Eighth" ])
975+ ]
966976 , "Two blank lines separate definition lists" =:
967977 T.unlines
968978 [ " First :: list"