@@ -88,7 +88,7 @@ nested p = do
88 return res
88 return res
90specialChars :: [Char]
90specialChars :: [Char]
91−specialChars = "'[]<=&*{}"
91+specialChars = "'[]<=&*{}|"
93spaceChars :: [Char]
93spaceChars :: [Char]
94spaceChars = " \n\t"
94spaceChars = " \n\t"
@@ -318,6 +318,7 @@ inline = whitespace
319 <|> strong
319 <|> strong
321 <|> internalLink
322 <|> internalLink
322 <|> externalLink
323 <|> externalLink
323 <|> inlineTag
324 <|> inlineTag
@@ -374,9 +375,30 @@ endline = () <$ try (newline <*
374 notFollowedBy' hrule <*
375 notFollowedBy' hrule <*
375 notFollowedBy anyListStart)
376 notFollowedBy anyListStart)
378+image :: MWParser Inlines
382+ fname <- many1 (noneOf "|]")
383+ _ <- many (try $ char '|' *> imageOption)
384+ caption <- (B.str fname <$ sym "]]")
385+ <|> try (char '|' *> (mconcat <$> manyTill inline (sym "]]")))
386+ return $ B.image fname "image" caption
388+imageOption :: MWParser String
390+ try (oneOfStrings [ "border", "thumbnail", "frameless"
391+ , "thumb", "upright", "left", "right"
392+ , "center", "none", "baseline", "sub"
393+ , "super", "top", "text-top", "middle"
394+ , "bottom", "text-bottom" ])
395+ <|> try (string "frame")
396+ <|> try (many1 (oneOf "x0123456789") <* string "px")
397+ <|> try (oneOfStrings ["link=","alt=","page=","class="] <* many (noneOf "|]"))
377internalLink :: MWParser Inlines
399internalLink :: MWParser Inlines
378internalLink = try $ do
400internalLink = try $ do
379− string "[["
401+ sym "[["
380 let addUnderscores x = let (pref,suff) = break (=='#') x
402 let addUnderscores x = let (pref,suff) = break (=='#') x
381 in pref ++ intercalate "_" (words suff)
403 in pref ++ intercalate "_" (words suff)
382 pagename <- unwords . words <$> many (noneOf "|]")
404 pagename <- unwords . words <$> many (noneOf "|]")
@@ -385,7 +407,7 @@ internalLink = try $ do
385 -- the "pipe trick"
407 -- the "pipe trick"
386 -- [[Help:Contents|] -> "Contents"
408 -- [[Help:Contents|] -> "Contents"
387 <|> (return $ B.text $ drop 1 $ dropWhile (/=':') pagename) )
409 <|> (return $ B.text $ drop 1 $ dropWhile (/=':') pagename) )
388− string "]]"
410+ sym "]]"
389 linktrail <- B.text <$> many (char '\'' <|> letter)
411 linktrail <- B.text <$> many (char '\'' <|> letter)
390 return $ B.link (addUnderscores pagename) "wikilink" (label <> linktrail)
412 return $ B.link (addUnderscores pagename) "wikilink" (label <> linktrail)