git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: ensure that list starts begin at left margin.
5d71e37John MacFarlane
src/Text/Pandoc/Readers/MediaWiki.hs+18−9
@@ -292,9 +292,11 @@ tableCell = try $ do
292 attrs <- option [] $ try $ parseAttrs <* skipSpaces <* char '|' <*
292 attrs <- option [] $ try $ parseAttrs <* skipSpaces <* char '|' <*
293 notFollowedBy (char '|')
293 notFollowedBy (char '|')
294 skipMany spaceChar
294 skipMany spaceChar
295+ pos' <- getPosition
295 ls <- concat <$> many (notFollowedBy (cellsep <|> rowsep <|> tableEnd) *>
296 ls <- concat <$> many (notFollowedBy (cellsep <|> rowsep <|> tableEnd) *>
296 ((snd <$> withRaw table) <|> count 1 anyChar))
297 ((snd <$> withRaw table) <|> count 1 anyChar))
298+ bs <- parseFromString (do setPosition pos'
297− bs <- parseFromString (mconcat <$> many block) ls
299+ mconcat <$> many block) ls
298 let align = case lookup "align" attrs of
300 let align = case lookup "align" attrs of
299 Just "left" -> AlignLeft
301 Just "left" -> AlignLeft
300 Just "right" -> AlignRight
302 Just "right" -> AlignRight
@@ -428,8 +430,13 @@ defListItem = try $ do
428 return (terms, defs)
430 return (terms, defs)
429
431
430defListTerm :: PandocMonad m => MWParser m Inlines
432defListTerm :: PandocMonad m => MWParser m Inlines
433+defListTerm = do
434+ guardColumnOne
435+ char ';'
431−defListTerm = char ';' >> skipMany spaceChar >> anyLine >>=
436+ skipMany spaceChar
437+ pos' <- getPosition
438+ anyLine >>= parseFromString (do setPosition pos'
432− parseFromString (trimInlines . mconcat <$> many inline)
439+ trimInlines . mconcat <$> many inline)
433
440
434listStart :: PandocMonad m => Char -> MWParser m ()
441listStart :: PandocMonad m => Char -> MWParser m ()
435listStart c = char c *> notFollowedBy listStartChar
442listStart c = char c *> notFollowedBy listStartChar
@@ -438,10 +445,7 @@ listStartChar :: PandocMonad m => MWParser m Char
438listStartChar = oneOf "*#;:"
445listStartChar = oneOf "*#;:"
439
446
440anyListStart :: PandocMonad m => MWParser m Char
447anyListStart :: PandocMonad m => MWParser m Char
441−anyListStart = char '*'
448+anyListStart = guardColumnOne >> oneOf "*#:;"
442− <|> char '#'
443− <|> char ':'
444− <|> char ';'
445
449
446li :: PandocMonad m => MWParser m Blocks
450li :: PandocMonad m => MWParser m Blocks
447li = lookAhead (htmlTag (~== TagOpen "li" [])) *>
451li = lookAhead (htmlTag (~== TagOpen "li" [])) *>
@@ -449,16 +453,19 @@ li = lookAhead (htmlTag (~== TagOpen "li" [])) *>
449
453
450listItem :: PandocMonad m => Char -> MWParser m Blocks
454listItem :: PandocMonad m => Char -> MWParser m Blocks
451listItem c = try $ do
455listItem c = try $ do
456+ guardColumnOne
452 extras <- many (try $ char c <* lookAhead listStartChar)
457 extras <- many (try $ char c <* lookAhead listStartChar)
453 if null extras
458 if null extras
454 then listItem' c
459 then listItem' c
455 else do
460 else do
456 skipMany spaceChar
461 skipMany spaceChar
462+ pos' <- getPosition
457 first <- concat <$> manyTill listChunk newline
463 first <- concat <$> manyTill listChunk newline
458 rest <- many
464 rest <- many
459 (try $ string extras *> lookAhead listStartChar *>
465 (try $ string extras *> lookAhead listStartChar *>
460 (concat <$> manyTill listChunk newline))
466 (concat <$> manyTill listChunk newline))
461− contents <- parseFromString (many1 $ listItem' c)
467+ contents <- parseFromString (do setPosition pos'
468+ many1 $ listItem' c)
462 (unlines (first : rest))
469 (unlines (first : rest))
463 case c of
470 case c of
464 '*' -> return $ B.bulletList contents
471 '*' -> return $ B.bulletList contents
@@ -480,10 +487,12 @@ listItem' :: PandocMonad m => Char -> MWParser m Blocks
480listItem' c = try $ do
487listItem' c = try $ do
481 listStart c
488 listStart c
482 skipMany spaceChar
489 skipMany spaceChar
490+ pos' <- getPosition
483 first <- concat <$> manyTill listChunk newline
491 first <- concat <$> manyTill listChunk newline
484 rest <- many (try $ char c *> lookAhead listStartChar *>
492 rest <- many (try $ char c *> lookAhead listStartChar *>
485 (concat <$> manyTill listChunk newline))
493 (concat <$> manyTill listChunk newline))
494+ parseFromString (do setPosition pos'
486− parseFromString (firstParaToPlain . mconcat <$> many1 block)
495+ firstParaToPlain . mconcat <$> many1 block)
487 $ unlines $ first : rest
496 $ unlines $ first : rest
488
497
489firstParaToPlain :: Blocks -> Blocks
498firstParaToPlain :: Blocks -> Blocks
test/command/2606.mdnew file+58
@@ -0,0 +1,58 @@
1+```
2+% pandoc -f mediawiki -t html5
3+{|
4+| * hello
5+|}
6+^D
7+<table>
8+<tbody>
9+<tr class="odd">
10+<td><p>* hello</p></td>
11+</tr>
12+</tbody>
13+</table>
14+```
15+
16+```
17+% pandoc -f mediawiki -t html5
18+{|
19+|
20+* hello
21+|}
22+^D
23+<table>
24+<tbody>
25+<tr class="odd">
26+<td><ul>
27+<li>hello</li>
28+</ul></td>
29+</tr>
30+</tbody>
31+</table>
32+```
33+
34+```
35+% pandoc -f mediawiki -t html5
36+{|
37+|
38+ * hello
39+|}
40+^D
41+<table>
42+<tbody>
43+<tr class="odd">
44+<td><p><code>* hello</code></p></td>
45+</tr>
46+</tbody>
47+</table>
48+```
49+
50+```
51+% pandoc -f mediawiki -t html5
52+* * hi
53+^D
54+<ul>
55+<li>* hi</li>
56+</ul>
57+```
58+