git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: Implemented numbered external links.
017095fJohn MacFarlane
src/Text/Pandoc/Readers/MediaWiki.hs+12−8
@@ -60,13 +60,16 @@ readMediaWiki :: ReaderOptions -- ^ Reader options
60 -> String -- ^ String to parse (assuming @'\n'@ line endings)
60 -> String -- ^ String to parse (assuming @'\n'@ line endings)
61 -> Pandoc
61 -> Pandoc
62readMediaWiki opts s =
62readMediaWiki opts s =
63− case runParser parseMediaWiki MWState{ mwOptions = opts, mwMaxNestingLevel = 4 }
63+ case runParser parseMediaWiki MWState{ mwOptions = opts
64+ , mwMaxNestingLevel = 4
65+ , mwNextLinkNumber = 1 }
64 "source" (s ++ "\n") of
66 "source" (s ++ "\n") of
65 Left err' -> error $ "\nError:\n" ++ show err'
67 Left err' -> error $ "\nError:\n" ++ show err'
66 Right result -> result
68 Right result -> result
67
69
68−data MWState = MWState { mwOptions :: ReaderOptions
70+data MWState = MWState { mwOptions :: ReaderOptions
69 , mwMaxNestingLevel :: Int
71 , mwMaxNestingLevel :: Int
72+ , mwNextLinkNumber :: Int
70 }
73 }
71
74
72type MWParser = Parser [Char] MWState
75type MWParser = Parser [Char] MWState
@@ -369,12 +372,13 @@ externalLink :: MWParser Inlines
369externalLink = try $ do
372externalLink = try $ do
370 char '['
373 char '['
371 (_, src) <- uri
374 (_, src) <- uri
375+ lab <- try (trimInlines . mconcat <$>
372− skipMany1 spaceChar
376+ (skipMany1 spaceChar *> manyTill inline (char ']')))
373− lab <- manyTill inline (char ']')
377+ <|> do char ']'
374− let lab' = if null lab
378+ num <- mwNextLinkNumber <$> getState
375− then [B.str "1"] -- TODO generate sequentially from state
379+ updateState $ \st -> st{ mwNextLinkNumber = num + 1 }
376− else lab
380+ return $ B.str $ show num
377− return $ B.link src "" $ trimInlines $ mconcat lab'
381+ return $ B.link src "" lab
378
382
379url :: MWParser Inlines
383url :: MWParser Inlines
380url = do
384url = do
tests/mediawiki-reader.native+1
@@ -72,6 +72,7 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})
72,Header 2 [Str "external",Space,Str "links"]
72,Header 2 [Str "external",Space,Str "links"]
73,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
73,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
74,Para [Link [Str "http://johnmacfarlane.net/pandoc/"] ("http://johnmacfarlane.net/pandoc/","")]
74,Para [Link [Str "http://johnmacfarlane.net/pandoc/"] ("http://johnmacfarlane.net/pandoc/","")]
75+,Para [Link [Str "1"] ("http://google.com",""),Space,Link [Str "2"] ("http://yahoo.com","")]
75,Header 2 [Str "lists"]
76,Header 2 [Str "lists"]
76,BulletList
77,BulletList
77 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
78 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
tests/mediawiki-reader.wiki+2
@@ -143,6 +143,8 @@ Nother paragraph.
143
143
144http://johnmacfarlane.net/pandoc/
144http://johnmacfarlane.net/pandoc/
145
145
146+[http://google.com] [http://yahoo.com]
147+
146== lists ==
148== lists ==
147
149
148* Start each line
150* Start each line