@@ -8,6 +8,9 @@ import Network.HTTP.Types.Status (status200)
88import Network.HTTP.Types.Header (hContentType)
99import Network.HTTP.Types.URI (queryToQueryText)
1010import Text.Pandoc
11+import Text.Pandoc.Highlighting (pygments)
12+import Text.Pandoc.Readers (getReader, Reader(..))
13+import Text.Pandoc.Writers (getWriter, Writer(..))
1114import Text.Pandoc.Error (PandocError)
1215import Text.Pandoc.Shared (tabFilter)
1316import Data.Aeson
@@ -25,12 +28,16 @@ app req respond = do
2528 text <- getParam "text" >>= checkLength . fromMaybe T.empty
2629 fromFormat <- fromMaybe "" <$> getParam "from"
2730 toFormat <- fromMaybe "" <$> getParam "to"
28− reader <- maybe (error $ "could not find reader for " ++ T.unpack fromFormat) return
29− $ lookup fromFormat fromFormats
30− let writer = maybe (error $ "could not find writer for " ++ T.unpack toFormat) id
31− $ lookup toFormat toFormats
32− let result = case reader $ tabFilter 4 $ T.unpack text of
33− Right doc -> T.pack $ writer doc
31+ let reader = case getReader (T.unpack fromFormat) of
32+ Right (TextReader r) -> r readerOpts
33+ _ -> error $ "could not find reader for "
34+ ++ T.unpack fromFormat
35+ let writer = case getWriter (T.unpack toFormat) of
36+ Right (StringWriter w) -> w writerOpts
37+ _ -> error $ "could not find writer for " ++
38+ T.unpack toFormat
39+ let result = case runPure $ reader (tabFilter 4 text) >>= writer of
40+ Right s -> T.pack s
3441 Left err -> error (show err)
3542 let output = encode $ object [ T.pack "html" .= result
3643 , T.pack "name" .=
@@ -50,52 +57,7 @@ writerOpts :: WriterOptions
5057writerOpts = def { writerReferenceLinks = True,
5158 writerEmailObfuscation = NoObfuscation,
5259 writerHTMLMathMethod = MathJax "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",
53− writerHighlight = True }
60+ writerHighlightStyle = Just pygments }
5461
5562readerOpts :: ReaderOptions
56−readerOpts = def { readerParseRaw = True,
57− readerSmart = True }
58−
59−fromFormats :: [(Text, String -> Either PandocError Pandoc)]
60−fromFormats = [
61− ("native" , readNative)
62− ,("json" , Text.Pandoc.readJSON readerOpts)
63− ,("markdown" , readMarkdown readerOpts)
64− ,("markdown_strict" , readMarkdown readerOpts{
65− readerExtensions = strictExtensions,
66− readerSmart = False })
67− ,("markdown_phpextra" , readMarkdown readerOpts{
68− readerExtensions = phpMarkdownExtraExtensions })
69− ,("markdown_github" , readMarkdown readerOpts{
70− readerExtensions = githubMarkdownExtensions })
71− ,("markdown_mmd", readMarkdown readerOpts{
72− readerExtensions = multimarkdownExtensions })
73− ,("rst" , readRST readerOpts)
74− ,("mediawiki" , readMediaWiki readerOpts)
75− ,("docbook" , readDocBook readerOpts)
76− ,("opml" , readOPML readerOpts)
77− ,("t2t" , readTxt2TagsNoMacros readerOpts)
78− ,("org" , readOrg readerOpts)
79− ,("textile" , readTextile readerOpts) -- TODO : textile+lhs
80− ,("html" , readHtml readerOpts)
81− ,("latex" , readLaTeX readerOpts)
82− ,("haddock" , readHaddock readerOpts)
83− ]
84−
85−toFormats :: [(Text, Pandoc -> String)]
86−toFormats = mapMaybe (\(x,y) ->
87− case y of
88− PureStringWriter w -> Just (T.pack x, w writerOpts{
89− writerExtensions =
90− case x of
91− "markdown_strict" -> strictExtensions
92− "markdown_phpextra" -> phpMarkdownExtraExtensions
93− "markdown_mmd" -> multimarkdownExtensions
94− "markdown_github" -> githubMarkdownExtensions
95− _ -> pandocExtensions
96− })
97− _ ->
98− case x of
99− "rtf" -> Just (T.pack x, writeRTF writerOpts)
100− _ -> Nothing) writers
101−
63+readerOpts = def