git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: Implemented numbered external links.
commit017095f690c6b2154e8fbeaecdcc1b99583c1924 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 13 Sep 2012, 15:24 (14 years ago) parent8cc5625
3 files changed+15−8
src/Text/Pandoc/Readers/MediaWiki.hs+12−8 tests/mediawiki-reader.native+1 tests/mediawiki-reader.wiki+2
src/Text/Pandoc/Readers/MediaWiki.hs+12−8
@@ -60,13 +60,16 @@ readMediaWiki :: ReaderOptions -- ^ Reader options
6060 -> String -- ^ String to parse (assuming @'\n'@ line endings)
6161 -> Pandoc
6262readMediaWiki opts s =
63− case runParser parseMediaWiki MWState{ mwOptions = opts, mwMaxNestingLevel = 4 }
63+ case runParser parseMediaWiki MWState{ mwOptions = opts
64+ , mwMaxNestingLevel = 4
65+ , mwNextLinkNumber = 1 }
6466 "source" (s ++ "\n") of
6567 Left err' -> error $ "\nError:\n" ++ show err'
6668 Right result -> result
6769
68−data MWState = MWState { mwOptions :: ReaderOptions
70+data MWState = MWState { mwOptions :: ReaderOptions
6971 , mwMaxNestingLevel :: Int
72+ , mwNextLinkNumber :: Int
7073 }
7174
7275type MWParser = Parser [Char] MWState
@@ -369,12 +372,13 @@ externalLink :: MWParser Inlines
369372externalLink = try $ do
370373 char '['
371374 (_, src) <- uri
372− skipMany1 spaceChar
373− lab <- manyTill inline (char ']')
374− let lab' = if null lab
375− then [B.str "1"] -- TODO generate sequentially from state
376− else lab
377− return $ B.link src "" $ trimInlines $ mconcat lab'
375+ lab <- try (trimInlines . mconcat <$>
376+ (skipMany1 spaceChar *> manyTill inline (char ']')))
377+ <|> do char ']'
378+ num <- mwNextLinkNumber <$> getState
379+ updateState $ \st -> st{ mwNextLinkNumber = num + 1 }
380+ return $ B.str $ show num
381+ return $ B.link src "" lab
378382
379383url :: MWParser Inlines
380384url = do
tests/mediawiki-reader.native+1
@@ -72,6 +72,7 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})
7272,Header 2 [Str "external",Space,Str "links"]
7373,Para [Link [Emph [Str "Google"],Space,Str "search",Space,Str "engine"] ("http://google.com","")]
7474,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","")]
7576,Header 2 [Str "lists"]
7677,BulletList
7778 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
tests/mediawiki-reader.wiki+2
@@ -143,6 +143,8 @@ Nother paragraph.
143143
144144http://johnmacfarlane.net/pandoc/
145145
146+[http://google.com] [http://yahoo.com]
147+
146148== lists ==
147149
148150* Start each line