git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: internal links.
a0d7b3fJohn MacFarlane
src/Text/Pandoc/Readers/MediaWiki.hs+4−4
@@ -30,8 +30,6 @@ Conversion of mediawiki text to 'Pandoc' document.
30-}
30-}
31{-
31{-
32TODO:
32TODO:
33−_ support internal links http://www.mediawiki.org/wiki/Help:Links
34−_ support external links (partially implemented)
35_ support images http://www.mediawiki.org/wiki/Help:Images
33_ support images http://www.mediawiki.org/wiki/Help:Images
36_ support tables http://www.mediawiki.org/wiki/Help:Tables
34_ support tables http://www.mediawiki.org/wiki/Help:Tables
37- footnotes?
35- footnotes?
@@ -51,7 +49,7 @@ import Text.Pandoc.Shared ( stripTrailingNewlines, safeRead )
51import Data.Monoid (mconcat, mempty)
49import Data.Monoid (mconcat, mempty)
52import Control.Applicative ((<$>), (<*), (*>), (<$))
50import Control.Applicative ((<$>), (<*), (*>), (<$))
53import Control.Monad
51import Control.Monad
54−import Data.List (intersperse)
52+import Data.List (intersperse, intercalate )
55import Text.HTML.TagSoup
53import Text.HTML.TagSoup
56import Data.Sequence (viewl, ViewL(..), (<|))
54import Data.Sequence (viewl, ViewL(..), (<|))
57
55
@@ -379,6 +377,8 @@ endline = () <$ try (newline <*
379internalLink :: MWParser Inlines
377internalLink :: MWParser Inlines
380internalLink = try $ do
378internalLink = try $ do
381 string "[["
379 string "[["
380+ let addUnderscores x = let (pref,suff) = break (=='#') x
381+ in pref ++ intercalate "_" (words suff)
382 pagename <- unwords . words <$> many (noneOf "|]")
382 pagename <- unwords . words <$> many (noneOf "|]")
383 label <- option (B.text pagename) $ char '|' *>
383 label <- option (B.text pagename) $ char '|' *>
384 ( (mconcat <$> many1 (notFollowedBy (char ']') *> inline))
384 ( (mconcat <$> many1 (notFollowedBy (char ']') *> inline))
@@ -387,7 +387,7 @@ internalLink = try $ do
387 <|> (return $ B.text $ drop 1 $ dropWhile (/=':') pagename) )
387 <|> (return $ B.text $ drop 1 $ dropWhile (/=':') pagename) )
388 string "]]"
388 string "]]"
389 linktrail <- B.text <$> many (char '\'' <|> letter)
389 linktrail <- B.text <$> many (char '\'' <|> letter)
390− return $ B.link pagename "wikilink" (label <> linktrail)
390+ return $ B.link (addUnderscores pagename) "wikilink" (label <> linktrail)
391
391
392externalLink :: MWParser Inlines
392externalLink :: MWParser Inlines
393externalLink = try $ do
393externalLink = try $ do
tests/mediawiki-reader.native+2
@@ -80,6 +80,8 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})
80,Para [Link [Str "Helpers"] ("Help","wikilink")]
80,Para [Link [Str "Helpers"] ("Help","wikilink")]
81,Para [Link [Str "Help"] ("Help","wikilink"),Str "ers"]
81,Para [Link [Str "Help"] ("Help","wikilink"),Str "ers"]
82,Para [Link [Str "Contents"] ("Help:Contents","wikilink")]
82,Para [Link [Str "Contents"] ("Help:Contents","wikilink")]
83+,Para [Link [Str "#My",Space,Str "anchor"] ("#My_anchor","wikilink")]
84+,Para [Link [Str "and",Space,Str "text"] ("Page#with_anchor","wikilink")]
83,Header 2 [Str "lists"]
85,Header 2 [Str "lists"]
84,BulletList
86,BulletList
85 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
87 [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]
tests/mediawiki-reader.wiki+4
@@ -159,6 +159,10 @@ http://johnmacfarlane.net/pandoc/
159
159
160[[Help:Contents|]]
160[[Help:Contents|]]
161
161
162+[[#My anchor]]
163+
164+[[Page#with anchor|and text]]
165+
162== lists ==
166== lists ==
163
167
164* Start each line
168* Start each line