1{-# LANGUAGE CPP #-}
2{-# OPTIONS_GHC -fno-warn-missing-fields #-}
3module Quoter (quote, quoteFile, quoteFileReload) where
4
5import Language.Haskell.TH.Syntax
6import Language.Haskell.TH.Quote (QuasiQuoter (..))
7
8#ifdef TEST_COFFEE
9import Text.Coffee
10import Text.Coffee (coffeeSettings)
11import Text.Shakespeare (shakespeare)
12#else
13#  ifdef TEST_ROY
14import Text.Roy
15#  else
16import Text.Julius
17#  endif
18#endif
19
20quote :: QuasiQuoter
21quoteFile :: FilePath -> Q Exp
22quoteFileReload :: FilePath -> Q Exp
23#ifdef TEST_COFFEE
24translate ('#':'{':rest) = translate $ '%':'{':translate rest
25translate (c:other) = c:translate other
26translate [] = []
27
28quote = QuasiQuoter { quoteExp = \s -> do
29    rs <- coffeeSettings
30    quoteExp (shakespeare rs) (translate s)
31    }
32
33quoteFile = coffeeFile
34quoteFileReload = coffeeFileReload
35#else
36#  ifdef TEST_ROY
37quote = roy
38quoteFile = royFile
39quoteFileReload = royFileReload
40#  else
41quote = julius
42quoteFile = juliusFile
43quoteFileReload = juliusFileReload
44#  endif
45#endif
46