@@ -828,13 +828,14 @@ list :: OrgParser (F Blocks)
828list = choice [ definitionList, bulletList, orderedList ] <?> "list"
828list = choice [ definitionList, bulletList, orderedList ] <?> "list"
830definitionList :: OrgParser (F Blocks)
830definitionList :: OrgParser (F Blocks)
831+definitionList = try $ do n <- lookAhead (bulletListStart' Nothing)
831−definitionList = fmap B.definitionList . fmap compactify'DL . sequence
832+ fmap B.definitionList . fmap compactify'DL . sequence
832− <$> many1 (definitionListItem bulletListStart)
833+ <$> many1 (definitionListItem $ bulletListStart' (Just n))
834bulletList :: OrgParser (F Blocks)
835bulletList :: OrgParser (F Blocks)
835−bulletList = try $ do n <- lookAhead bulletListStart
836+bulletList = try $ do n <- lookAhead (bulletListStart' Nothing)
836 fmap B.bulletList . fmap compactify' . sequence
837 fmap B.bulletList . fmap compactify' . sequence
837− <$> many1 (listItem (bulletListCont n))
838+ <$> many1 (listItem (bulletListStart' $ Just n))
839orderedList :: OrgParser (F Blocks)
840orderedList :: OrgParser (F Blocks)
840orderedList = fmap B.orderedList . fmap compactify' . sequence
841orderedList = fmap B.orderedList . fmap compactify' . sequence
@@ -846,17 +847,27 @@ genericListStart listMarker = try $
846 (+) <$> (length <$> many spaceChar)
847 (+) <$> (length <$> many spaceChar)
847 <*> (length <$> listMarker <* many1 spaceChar)
848 <*> (length <$> listMarker <* many1 spaceChar)
849−-- parses bullet list start and returns its length (excl. following whitespace)
850+-- parses bullet list marker. maybe we know the indent level
850bulletListStart :: OrgParser Int
851bulletListStart :: OrgParser Int
851−bulletListStart = genericListStart bulletListMarker
852+bulletListStart = bulletListStart' Nothing
852− where bulletListMarker = pure <$> oneOf "*-+"
853+
854−-- parses bullet list marker at a known indent level
855−bulletListCont :: Int -> OrgParser Int
854+bulletListStart' :: Maybe Int -> OrgParser Int
856−bulletListCont n
855+-- returns length of bulletList prefix, inclusive of marker
856+bulletListStart' Nothing = do ind <- many spaceChar
859+ return $ length ind + 1
857− -- Unindented lists are legal, but they can't use '*' bullets
860+ -- Unindented lists are legal, but they can't use '*' bullets
858− | n <= 1 = oneOf "+-" >> return n
861+ -- We return n to maintain compatibility with the generic listItem
859− | otherwise = count (n-1) spaceChar >> oneOf "+-*" >> return n
862+bulletListStart' (Just n) = do count (n-1) spaceChar
866+ where validBullets = if n == 1 then noAsterisks else bullets
867+ noAsterisks = filter (/= '*') bullets
861orderedListStart :: OrgParser Int
872orderedListStart :: OrgParser Int
862orderedListStart = genericListStart orderedListMarker
873orderedListStart = genericListStart orderedListMarker