@@ -62,6 +62,8 @@ module Text.Pandoc
6262 , readers
6363 , writers
6464 -- * Readers: converting /to/ Pandoc format
65+ , Reader (..)
66+ , readDocX
6567 , readMarkdown
6668 , readMediaWiki
6769 , readRST
@@ -125,6 +127,7 @@ import Text.Pandoc.Readers.HTML
125127import Text.Pandoc.Readers.Textile
126128import Text.Pandoc.Readers.Native
127129import Text.Pandoc.Readers.Haddock
130+import Text.Pandoc.Readers.DocX
128131import Text.Pandoc.Writers.Native
129132import Text.Pandoc.Writers.Markdown
130133import Text.Pandoc.Writers.RST
@@ -192,24 +195,34 @@ markdown o s = do
192195 mapM_ warn warnings
193196 return doc
194197
198+data Reader = StringReader (ReaderOptions -> String -> IO Pandoc)
199+ | ByteStringReader (ReaderOptions -> BL.ByteString -> IO Pandoc)
200+
201+mkStringReader :: (ReaderOptions -> String -> Pandoc) -> Reader
202+mkStringReader r = StringReader (\o s -> return $ r o s)
203+
204+mkBSReader :: (ReaderOptions -> BL.ByteString -> Pandoc) -> Reader
205+mkBSReader r = ByteStringReader (\o s -> return $ r o s)
206+
195207-- | Association list of formats and readers.
196−readers :: [(String, ReaderOptions -> String -> IO Pandoc)]
197−readers = [ ("native" , \_ s -> return $ readNative s)
198− ,("json" , \o s -> return $ readJSON o s)
199− ,("markdown" , markdown)
200− ,("markdown_strict" , markdown)
201− ,("markdown_phpextra" , markdown)
202− ,("markdown_github" , markdown)
203− ,("markdown_mmd", markdown)
204− ,("rst" , \o s -> return $ readRST o s)
205− ,("mediawiki" , \o s -> return $ readMediaWiki o s)
206− ,("docbook" , \o s -> return $ readDocBook o s)
207− ,("opml" , \o s -> return $ readOPML o s)
208− ,("org" , \o s -> return $ readOrg o s)
209− ,("textile" , \o s -> return $ readTextile o s) -- TODO : textile+lhs
210− ,("html" , \o s -> return $ readHtml o s)
211− ,("latex" , \o s -> return $ readLaTeX o s)
212− ,("haddock" , \o s -> return $ readHaddock o s)
208+readers :: [(String, Reader)]
209+readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
210+ ,("json" , mkStringReader readJSON )
211+ ,("markdown" , StringReader markdown)
212+ ,("markdown_strict" , StringReader markdown)
213+ ,("markdown_phpextra" , StringReader markdown)
214+ ,("markdown_github" , StringReader markdown)
215+ ,("markdown_mmd", StringReader markdown)
216+ ,("rst" , mkStringReader readRST )
217+ ,("mediawiki" , mkStringReader readMediaWiki)
218+ ,("docbook" , mkStringReader readDocBook)
219+ ,("opml" , mkStringReader readOPML)
220+ ,("org" , mkStringReader readOrg)
221+ ,("textile" , mkStringReader readTextile) -- TODO : textile+lhs
222+ ,("html" , mkStringReader readHtml)
223+ ,("latex" , mkStringReader readLaTeX)
224+ ,("haddock" , mkStringReader readHaddock)
225+ ,("docx" , mkBSReader readDocX)
213226 ]
214227
215228data Writer = PureStringWriter (WriterOptions -> Pandoc -> String)
@@ -280,14 +293,17 @@ getDefaultExtensions "textile" = Set.fromList [Ext_auto_identifiers, Ext
280293getDefaultExtensions _ = Set.fromList [Ext_auto_identifiers]
281294
282295-- | Retrieve reader based on formatSpec (format+extensions).
283−getReader :: String -> Either String (ReaderOptions -> String -> IO Pandoc)
296+getReader :: String -> Either String Reader
284297getReader s =
285298 case parseFormatSpec s of
286299 Left e -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]
287− Right (readerName, setExts) ->
300+ Right (readerName, setExts) ->
288301 case lookup readerName readers of
289302 Nothing -> Left $ "Unknown reader: " ++ readerName
290− Just r -> Right $ \o ->
303+ Just (StringReader r) -> Right $ StringReader $ \o ->
304+ r o{ readerExtensions = setExts $
305+ getDefaultExtensions readerName }
306+ Just (ByteStringReader r) -> Right $ ByteStringReader $ \o ->
291307 r o{ readerExtensions = setExts $
292308 getDefaultExtensions readerName }
293309