From 5419b504cef0cc6e1a0f3e321b2fc0a66e12db3c Mon Sep 17 00:00:00 2001
From: John MacFarlane <fiddlosopher@gmail.com>
Date: Fri, 5 Oct 2012 19:25:26 -0700
Subject: [PATCH] Added stateWarnings to ParserState, added warning function.

This will be used to provide warnings for things like duplicate
footnote refs and link refs.
---
 src/Text/Pandoc/Parsing.hs | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs
index 9239ed9a3..597c00081 100644
--- a/src/Text/Pandoc/Parsing.hs
+++ b/src/Text/Pandoc/Parsing.hs
@@ -62,6 +62,7 @@ module Text.Pandoc.Parsing ( (>>~),
                              getOption,
                              guardEnabled,
                              guardDisabled,
+                             warning,
                              ParserState (..),
                              defaultParserState,
                              HeaderType (..),
@@ -725,6 +726,7 @@ data ParserState = ParserState
       stateExamples        :: M.Map String Int, -- ^ Map from example labels to numbers
       stateHasChapters     :: Bool,          -- ^ True if \chapter encountered
       stateMacros          :: [Macro],       -- ^ List of macros defined so far
+      stateWarnings        :: [(SourcePos, String)],  -- ^ List of warnings
       stateRstDefaultRole  :: String         -- ^ Current rST default interpreted text role
     }
 
@@ -751,11 +753,17 @@ defaultParserState =
                   stateExamples        = M.empty,
                   stateHasChapters     = False,
                   stateMacros          = [],
+                  stateWarnings        = [],
                   stateRstDefaultRole  = "title-reference"}
 
 getOption :: (ReaderOptions -> a) -> Parser s ParserState a
 getOption f = (f . stateOptions) `fmap` getState
 
+warning :: String -> Parser s ParserState ()
+warning msg = do
+  pos <- getPosition
+  modifyState $ \st -> st{ stateWarnings = stateWarnings st ++ [(pos,msg)] }
+
 -- | Succeed only if the extension is enabled.
 guardEnabled :: Extension -> Parser s ParserState ()
 guardEnabled ext = getOption readerExtensions >>= guard . Set.member ext