@@ -100,6 +100,8 @@ module Text.Pandoc
100100 -- * Version
101101 , pandocVersion
102102 -- * Miscellaneous
103+ , getReader
104+ , getWriter
103105 , rtfEmbedImage
104106 , jsonFilter
105107 , ToJsonFilter(..)
@@ -222,6 +224,35 @@ writers = [
222224 ,("asciidoc" , PureStringWriter writeAsciiDoc)
223225 ]
224226
227+getReader :: String -> Either String (ReaderOptions -> String -> Pandoc)
228+getReader s =
229+ case parseFormatSpec s of
230+ Left e -> Left $ show e
231+ Right (readerName, setExts) ->
232+ case lookup readerName readers of
233+ Nothing -> Left $ "Unknown reader: " ++ readerName
234+ Just r -> Right $ \o ->
235+ r o{ readerExtensions = setExts $
236+ readerExtensions o }
237+
238+-- | Retrieve writer based on formatSpec (format+extensions).
239+getWriter :: String -> Either String Writer
240+getWriter s =
241+ case parseFormatSpec s of
242+ Left e -> Left $ show e
243+ Right (writerName, setExts) ->
244+ case lookup writerName writers of
245+ Nothing -> Left $ "Unknown writer: " ++ writerName
246+ Just (PureStringWriter r) -> Right $ PureStringWriter $
247+ \o -> r o{ writerExtensions = setExts $
248+ writerExtensions o }
249+ Just (IOStringWriter r) -> Right $ IOStringWriter $
250+ \o -> r o{ writerExtensions = setExts $
251+ writerExtensions o }
252+ Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $
253+ \o -> r o{ writerExtensions = setExts $
254+ writerExtensions o }
255+
225256{-# DEPRECATED jsonFilter "Use toJsonFilter instead" #-}
226257-- | Converts a transformation on the Pandoc AST into a function
227258-- that reads and writes a JSON-encoded string. This is useful