@@ -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)
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
68−data MWState = MWState { mwOptions :: ReaderOptions
70+data MWState = MWState { mwOptions :: ReaderOptions
69 , mwMaxNestingLevel :: Int
71 , mwMaxNestingLevel :: Int
72+ , mwNextLinkNumber :: Int
72type MWParser = Parser [Char] MWState
75type MWParser = Parser [Char] MWState
@@ -369,12 +372,13 @@ externalLink :: MWParser Inlines
369externalLink = try $ do
372externalLink = try $ do
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
379url :: MWParser Inlines
383url :: MWParser Inlines