File: Quoter.hs

package info (click to toggle)
haskell-shakespeare 2.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 532 kB
  • sloc: haskell: 6,485; makefile: 2
file content (45 lines) | stat: -rw-r--r-- 996 bytes parent folder | download | duplicates (7)
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
38
39
40
41
42
43
44
45
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-missing-fields #-}
module Quoter (quote, quoteFile, quoteFileReload) where

import Language.Haskell.TH.Syntax
import Language.Haskell.TH.Quote (QuasiQuoter (..))

#ifdef TEST_COFFEE
import Text.Coffee
import Text.Coffee (coffeeSettings)
import Text.Shakespeare (shakespeare)
#else
#  ifdef TEST_ROY
import Text.Roy
#  else
import Text.Julius
#  endif
#endif

quote :: QuasiQuoter
quoteFile :: FilePath -> Q Exp
quoteFileReload :: FilePath -> Q Exp
#ifdef TEST_COFFEE
translate ('#':'{':rest) = translate $ '%':'{':translate rest
translate (c:other) = c:translate other
translate [] = []

quote = QuasiQuoter { quoteExp = \s -> do
    rs <- coffeeSettings
    quoteExp (shakespeare rs) (translate s)
    }

quoteFile = coffeeFile
quoteFileReload = coffeeFileReload
#else
#  ifdef TEST_ROY
quote = roy
quoteFile = royFile
quoteFileReload = royFileReload
#  else
quote = julius
quoteFile = juliusFile
quoteFileReload = juliusFileReload
#  endif
#endif