git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: Warn about duplicate link references.
ef806f6John MacFarlane
src/Text/Pandoc/Parsing.hs+1
@@ -134,6 +134,7 @@ module Text.Pandoc.Parsing ( (>>~),
134 getState,
134 getState,
135 setState,
135 setState,
136 updateState,
136 updateState,
137+ SourcePos,
137 getPosition,
138 getPosition,
138 setPosition,
139 setPosition,
139 sourceColumn,
140 sourceColumn,
src/Text/Pandoc/Readers/Markdown.hs+12−1
@@ -241,8 +241,15 @@ parseMarkdown = do
241 $ B.setDate (runF date st)
241 $ B.setDate (runF date st)
242 $ B.doc $ runF blocks st
242 $ B.doc $ runF blocks st
243
243
244+addWarning :: Maybe SourcePos -> String -> MarkdownParser ()
245+addWarning mbpos msg =
246+ updateState $ \st -> st{
247+ stateWarnings = (msg ++ maybe "" (\pos -> " " ++ show pos) mbpos) :
248+ stateWarnings st }
249+
244referenceKey :: MarkdownParser (F Blocks)
250referenceKey :: MarkdownParser (F Blocks)
245referenceKey = try $ do
251referenceKey = try $ do
252+ pos <- getPosition
246 skipNonindentSpaces
253 skipNonindentSpaces
247 (_,raw) <- reference
254 (_,raw) <- reference
248 char ':'
255 char ':'
@@ -262,7 +269,11 @@ referenceKey = try $ do
262 let target = (escapeURI $ trimr src, tit)
269 let target = (escapeURI $ trimr src, tit)
263 st <- getState
270 st <- getState
264 let oldkeys = stateKeys st
271 let oldkeys = stateKeys st
272+ let key = toKey raw
273+ case M.lookup key oldkeys of
274+ Just _ -> addWarning (Just pos) $ "Duplicate link reference `" ++ raw ++ "'"
275+ Nothing -> return ()
265− updateState $ \s -> s { stateKeys = M.insert (toKey raw) target oldkeys }
276+ updateState $ \s -> s { stateKeys = M.insert key target oldkeys }
266 return $ return mempty
277 return $ return mempty
267
278
268referenceTitle :: MarkdownParser String
279referenceTitle :: MarkdownParser String