git.iko.soy/typeable/pandoc
on master help sign in
Fixed mediawiki ordered list parsing.

Closes #1122.

commit9f3b2f6f5d06a4cf3142ffc74c8de4c1cc2bd928 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 22 Jan 2014, 22:07 (13 years ago) parent6c59f06
2 files changed+17−12
src/Text/Pandoc/Readers/MediaWiki.hs+15−10 tests/mediawiki-reader.wiki+2−2
src/Text/Pandoc/Readers/MediaWiki.hs+15−10
@@ -149,9 +149,16 @@ inlinesInTags tag = try $ do
149149blocksInTags :: String -> MWParser Blocks
150150blocksInTags tag = try $ do
151151 (_,raw) <- htmlTag (~== TagOpen tag [])
152+ let closer = if tag == "li"
153+ then htmlTag (~== TagClose "li")
154+ <|> lookAhead (
155+ htmlTag (~== TagOpen "li" [])
156+ <|> htmlTag (~== TagClose "ol")
157+ <|> htmlTag (~== TagClose "ul"))
158+ else htmlTag (~== TagClose tag)
152159 if '/' `elem` raw -- self-closing tag
153160 then return mempty
154− else mconcat <$> manyTill block (htmlTag (~== TagClose tag))
161+ else mconcat <$> manyTill block closer
155162
156163charsInTags :: String -> MWParser [Char]
157164charsInTags tag = try $ do
@@ -381,15 +388,13 @@ bulletList = B.bulletList <$>
381388orderedList :: MWParser Blocks
382389orderedList =
383390 (B.orderedList <$> many1 (listItem '#'))
384− <|> (B.orderedList <$> (htmlTag (~== TagOpen "ul" []) *> spaces *>
385− many (listItem '#' <|> li) <*
386− optional (htmlTag (~== TagClose "ul"))))
387− <|> do (tag,_) <- htmlTag (~== TagOpen "ol" [])
388− spaces
389− items <- many (listItem '#' <|> li)
390− optional (htmlTag (~== TagClose "ol"))
391− let start = fromMaybe 1 $ safeRead $ fromAttrib "start" tag
392− return $ B.orderedListWith (start, DefaultStyle, DefaultDelim) items
391+ <|> try
392+ (do (tag,_) <- htmlTag (~== TagOpen "ol" [])
393+ spaces
394+ items <- many (listItem '#' <|> li)
395+ optional (htmlTag (~== TagClose "ol"))
396+ let start = fromMaybe 1 $ safeRead $ fromAttrib "start" tag
397+ return $ B.orderedListWith (start, DefaultStyle, DefaultDelim) items)
393398
394399definitionList :: MWParser Blocks
395400definitionList = B.definitionList <$> many1 defListItem
tests/mediawiki-reader.wiki+2−2
@@ -232,11 +232,11 @@ ends the list.
232232 <li>list item A2</li>
233233</ol>
234234
235−<ul>
235+<ol>
236236#abc
237237#def
238238#ghi
239−</ul>
239+</ol>
240240
241241<ol start="9">
242242<li>Amsterdam</li>