summaryrefslogtreecommitdiff
path: root/benchmark/weigh-pandoc.hs
blob: 198d09b4620fb1d0af3031c082a0fe57e282fa49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import Weigh
import Text.Pandoc

main :: IO ()
main = do
  doc <- read <$> readFile "tests/testsuite.native"
  mainWith $ do
    func "Pandoc document" id doc
    mapM_
      (\(n,r) -> weighReader doc n (handleError . r def{ readerSmart = True }))
      [("markdown", readMarkdown)
      ,("html", readHtml)
      ,("docbook", readDocBook)
      ,("latex", readLaTeX)
      ,("commonmark", readCommonMark)
      ]
    mapM_
      (\(n,w) -> weighWriter doc n (w def))
      [("markdown", writeMarkdown)
      ,("html", writeHtmlString)
      ,("docbook", writeDocbook)
      ,("latex", writeLaTeX)
      ,("commonmark", writeCommonMark)
      ]

weighWriter :: Pandoc -> String -> (Pandoc -> String) -> Weigh ()
weighWriter doc name writer = func (name ++ " writer") writer doc

weighReader :: Pandoc -> String -> (String -> Pandoc) -> Weigh ()
weighReader doc name reader = do
  case lookup name writers of
       Just (PureStringWriter writer) ->
         let inp = writer def{ writerWrapText = WrapAuto} doc
         in func (name ++ " reader") reader inp
       _ -> return () -- no writer for reader