git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: Support skipped level in lists.
bf26663John MacFarlane
src/Text/Pandoc/Readers/MediaWiki.hs+18−2
@@ -30,7 +30,6 @@ Conversion of mediawiki text to 'Pandoc' document.
30-}
30-}
31{-
31{-
32TODO:
32TODO:
33−_ correctly handle skipped level in list, e.g. # to ###
34_ tests for lists
33_ tests for lists
35_ support HTML lists
34_ support HTML lists
36_ support list style attributes and start values in ol lists, also
35_ support list style attributes and start values in ol lists, also
@@ -199,10 +198,27 @@ listStartChar :: MWParser Char
199listStartChar = oneOf "*#;:"
198listStartChar = oneOf "*#;:"
200
199
201anyListStart :: MWParser ()
200anyListStart :: MWParser ()
202−anyListStart = listStart '*' <|> listStart '#' <|> listStart ';'
201+anyListStart = skipMany1 (char '*')
202+ <|> skipMany1 (char '#')
203+ <|> (() <$ char ';')
203
204
204listItem :: Char -> MWParser Blocks
205listItem :: Char -> MWParser Blocks
205listItem c = try $ do
206listItem c = try $ do
207+ extras <- many (try $ char c <* lookAhead listStartChar)
208+ if null extras
209+ then listItem' c
210+ else do
211+ first <- manyTill anyChar newline
212+ rest <- many (try $ string extras *> manyTill anyChar newline)
213+ contents <- parseFromString (many1 $ listItem' c)
214+ (unlines (first : rest))
215+ case c of
216+ '*' -> return $ B.bulletList contents
217+ '#' -> return $ B.orderedList contents
218+ _ -> mzero
219+
220+listItem' :: Char -> MWParser Blocks
221+listItem' c = try $ do
206 listStart c
222 listStart c
207 first <- manyTill anyChar newline
223 first <- manyTill anyChar newline
208 rest <- many (try $ char c *> lookAhead listStartChar *>
224 rest <- many (try $ char c *> lookAhead listStartChar *>