Muse reader: fix parsing of nested definition lists
This commit is contained in:
parent
62c395dafa
commit
22b69b557e
2 changed files with 21 additions and 12 deletions
|
@ -467,26 +467,25 @@ orderedList = try $ do
|
|||
rest <- many $ listItem (col - 1) (void (orderedListMarker style delim))
|
||||
return $ B.orderedListWith p <$> sequence (first : rest)
|
||||
|
||||
definitionListItem :: PandocMonad m => MuseParser m (F (Inlines, [Blocks]))
|
||||
definitionListItem = try $ do
|
||||
many spaceChar
|
||||
definitionListItem :: PandocMonad m => Int -> MuseParser m (F (Inlines, [Blocks]))
|
||||
definitionListItem n = try $ do
|
||||
count n spaceChar
|
||||
pos <- getPosition
|
||||
(guardDisabled Ext_amuse) <|> (guard (sourceColumn pos /= 1)) -- Initial space is required by Amusewiki, but not Emacs Muse
|
||||
term <- trimInlinesF . mconcat <$> manyTill (choice inlineList) (string "::")
|
||||
void spaceChar <|> lookAhead eol
|
||||
contents <- listItemContents' $ sourceColumn pos
|
||||
optionMaybe blankline
|
||||
pure $ do lineContent' <- contents
|
||||
term' <- term
|
||||
pure (term', [lineContent'])
|
||||
|
||||
definitionListItems :: PandocMonad m => MuseParser m (F [(Inlines, [Blocks])])
|
||||
definitionListItems = sequence <$> many1 definitionListItem
|
||||
|
||||
definitionList :: PandocMonad m => MuseParser m (F Blocks)
|
||||
definitionList = do
|
||||
items <- definitionListItems
|
||||
return $ B.definitionList <$> items
|
||||
definitionList = try $ do
|
||||
many spaceChar
|
||||
pos <- getPosition
|
||||
(guardDisabled Ext_amuse) <|> (guard (sourceColumn pos /= 1)) -- Initial space is required by Amusewiki, but not Emacs Muse
|
||||
first <- definitionListItem 0
|
||||
rest <- many $ try (optionMaybe blankline >> definitionListItem (sourceColumn pos - 1))
|
||||
return $ B.definitionList <$> sequence (first : rest)
|
||||
|
||||
--
|
||||
-- tables
|
||||
|
|
|
@ -960,9 +960,19 @@ tests =
|
|||
definitionList [ ("Term1", [ para "This is a first definition\nAnd it has two lines;\nno, make that three."])
|
||||
, ("Term2", [ para "This is a second definition"])
|
||||
])
|
||||
, "Nested definition list" =:
|
||||
, "One-line nested definition list" =:
|
||||
" Foo :: bar :: baz" =?>
|
||||
definitionList [ ("Foo", [ definitionList [ ("bar", [ para "baz" ])]])]
|
||||
, "Nested definition list" =:
|
||||
T.unlines
|
||||
[ " First :: Second :: Third"
|
||||
, " Fourth :: Fifth :: Sixth"
|
||||
, " Seventh :: Eighth"
|
||||
] =?>
|
||||
definitionList [ ("First", [ definitionList [ ("Second", [ para "Third" ]),
|
||||
("Fourth", [ definitionList [ ("Fifth", [ para "Sixth"] ) ] ] ) ] ] )
|
||||
, ("Seventh", [ para "Eighth" ])
|
||||
]
|
||||
, "Two blank lines separate definition lists" =:
|
||||
T.unlines
|
||||
[ " First :: list"
|
||||
|
|
Loading…
Add table
Reference in a new issue