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