git.iko.soy/typeable/pandoc
on master help sign in
expose warnings from RST reader; refactor
1581685Daniel Bergey
src/Text/Pandoc.hs+12−13
@@ -201,19 +201,18 @@ parseFormatSpec = parse formatSpec ""
201 '-' -> Set.delete ext
201 '-' -> Set.delete ext
202 _ -> Set.insert ext
202 _ -> Set.insert ext
203
203
204−-- auxiliary function for readers:
205−markdown :: ReaderOptions -> String -> IO Pandoc
206−markdown o s = do
207− let (doc, warnings) = readMarkdownWithWarnings o s
208− mapM_ warn warnings
209− return doc
210−
211data Reader = StringReader (ReaderOptions -> String -> IO Pandoc)
204data Reader = StringReader (ReaderOptions -> String -> IO Pandoc)
212 | ByteStringReader (ReaderOptions -> BL.ByteString -> IO (Pandoc, MediaBag))
205 | ByteStringReader (ReaderOptions -> BL.ByteString -> IO (Pandoc, MediaBag))
213
206
214mkStringReader :: (ReaderOptions -> String -> Pandoc) -> Reader
207mkStringReader :: (ReaderOptions -> String -> Pandoc) -> Reader
215mkStringReader r = StringReader (\o s -> return $ r o s)
208mkStringReader r = StringReader (\o s -> return $ r o s)
216
209
210+mkStringReaderWithWarnings :: (ReaderOptions -> String -> (Pandoc, [String])) -> Reader
211+mkStringReaderWithWarnings r = StringReader $ \o s -> do
212+ let (doc, warnings) = r o s
213+ mapM_ warn warnings
214+ return doc
215+
217mkBSReader :: (ReaderOptions -> BL.ByteString -> (Pandoc, MediaBag)) -> Reader
216mkBSReader :: (ReaderOptions -> BL.ByteString -> (Pandoc, MediaBag)) -> Reader
218mkBSReader r = ByteStringReader (\o s -> return $ r o s)
217mkBSReader r = ByteStringReader (\o s -> return $ r o s)
219
218
@@ -221,12 +220,12 @@ mkBSReader r = ByteStringReader (\o s -> return $ r o s)
221readers :: [(String, Reader)]
220readers :: [(String, Reader)]
222readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
221readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
223 ,("json" , mkStringReader readJSON )
222 ,("json" , mkStringReader readJSON )
224− ,("markdown" , StringReader markdown)
223+ ,("markdown" , mkStringReaderWithWarnings readMarkdownWithWarnings)
225− ,("markdown_strict" , StringReader markdown)
224+ ,("markdown_strict" , mkStringReaderWithWarnings readMarkdownWithWarnings)
226− ,("markdown_phpextra" , StringReader markdown)
225+ ,("markdown_phpextra" , mkStringReaderWithWarnings readMarkdownWithWarnings)
227− ,("markdown_github" , StringReader markdown)
226+ ,("markdown_github" , mkStringReaderWithWarnings readMarkdownWithWarnings)
228− ,("markdown_mmd", StringReader markdown)
227+ ,("markdown_mmd", mkStringReaderWithWarnings readMarkdownWithWarnings)
229− ,("rst" , mkStringReader readRST )
228+ ,("rst" , mkStringReaderWithWarnings readRSTWithWarnings )
230 ,("mediawiki" , mkStringReader readMediaWiki)
229 ,("mediawiki" , mkStringReader readMediaWiki)
231 ,("docbook" , mkStringReader readDocBook)
230 ,("docbook" , mkStringReader readDocBook)
232 ,("opml" , mkStringReader readOPML)
231 ,("opml" , mkStringReader readOPML)
src/Text/Pandoc/Parsing.hs+10
@@ -65,6 +65,7 @@ module Text.Pandoc.Parsing ( anyLine,
65 widthsFromIndices,
65 widthsFromIndices,
66 gridTableWith,
66 gridTableWith,
67 readWith,
67 readWith,
68+ readWithWarnings,
68 readWithM,
69 readWithM,
69 testStringWith,
70 testStringWith,
70 guardEnabled,
71 guardEnabled,
@@ -881,6 +882,15 @@ readWith :: Parser [Char] st a
881 -> a
882 -> a
882readWith p t inp = runIdentity $ readWithM p t inp
883readWith p t inp = runIdentity $ readWithM p t inp
883
884
885+readWithWarnings :: Parser [Char] ParserState a
886+ -> ParserState
887+ -> String
888+ -> (a, [String])
889+readWithWarnings p = readWith $ do
890+ doc <- p
891+ warnings <- stateWarnings <$> getState
892+ return (doc, warnings)
893+
884-- | Parse a string with @parser@ (for testing).
894-- | Parse a string with @parser@ (for testing).
885testStringWith :: (Show a, Stream [Char] Identity Char)
895testStringWith :: (Show a, Stream [Char] Identity Char)
886 => ParserT [Char] ParserState Identity a
896 => ParserT [Char] ParserState Identity a
src/Text/Pandoc/Readers/Markdown.hs+1−5
@@ -79,11 +79,7 @@ readMarkdownWithWarnings :: ReaderOptions -- ^ Reader options
79 -> String -- ^ String to parse (assuming @'\n'@ line endings)
79 -> String -- ^ String to parse (assuming @'\n'@ line endings)
80 -> (Pandoc, [String])
80 -> (Pandoc, [String])
81readMarkdownWithWarnings opts s =
81readMarkdownWithWarnings opts s =
82− (readWith parseMarkdownWithWarnings) def{ stateOptions = opts } (s ++ "\n\n")
82+ (readWithWarnings parseMarkdown) def{ stateOptions = opts } (s ++ "\n\n")
83− where parseMarkdownWithWarnings = do
84− doc <- parseMarkdown
85− warnings <- stateWarnings <$> getState
86− return (doc, warnings)
87
83
88trimInlinesF :: F Inlines -> F Inlines
84trimInlinesF :: F Inlines -> F Inlines
89trimInlinesF = liftM trimInlines
85trimInlinesF = liftM trimInlines
src/Text/Pandoc/Readers/RST.hs+9−2
@@ -29,7 +29,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29Conversion from reStructuredText to 'Pandoc' document.
29Conversion from reStructuredText to 'Pandoc' document.
30-}
30-}
31module Text.Pandoc.Readers.RST (
31module Text.Pandoc.Readers.RST (
32− readRST
32+ readRST,
33+ readRSTWithWarnings
33 ) where
34 ) where
34import Text.Pandoc.Definition
35import Text.Pandoc.Definition
35import Text.Pandoc.Builder (setMeta, fromList)
36import Text.Pandoc.Builder (setMeta, fromList)
@@ -55,6 +56,9 @@ readRST :: ReaderOptions -- ^ Reader options
55 -> Pandoc
56 -> Pandoc
56readRST opts s = (readWith parseRST) def{ stateOptions = opts } (s ++ "\n\n")
57readRST opts s = (readWith parseRST) def{ stateOptions = opts } (s ++ "\n\n")
57
58
59+readRSTWithWarnings :: ReaderOptions -> String -> (Pandoc, [String])
60+readRSTWithWarnings opts s = (readWithWarnings parseRST) def{ stateOptions = opts } (s ++ "\n\n")
61+
58type RSTParser = Parser [Char] ParserState
62type RSTParser = Parser [Char] ParserState
59
63
60--
64--
@@ -1016,7 +1020,10 @@ renderRole contents fmt role attr = case role of
1016 fmtStr = fmt `mplus` newFmt
1020 fmtStr = fmt `mplus` newFmt
1017 (newRole, newAttr) = inherit attr
1021 (newRole, newAttr) = inherit attr
1018 in renderRole contents fmtStr newRole newAttr
1022 in renderRole contents fmtStr newRole newAttr
1023+ Nothing -> do
1024+ pos <- getPosition
1025+ addWarning (Just pos) $ "ignoring unknown role :" ++ custom ++ ": in "
1019− Nothing -> return $ B.str contents -- Undefined role
1026+ return $ B.str contents -- Undefined role
1020 where
1027 where
1021 titleRef ref = return $ B.str ref -- FIXME: Not a sensible behaviour
1028 titleRef ref = return $ B.str ref -- FIXME: Not a sensible behaviour
1022 rfcLink rfcNo = B.link rfcUrl ("RFC " ++ rfcNo) $ B.str ("RFC " ++ rfcNo)
1029 rfcLink rfcNo = B.link rfcUrl ("RFC " ++ rfcNo) $ B.str ("RFC " ++ rfcNo)