shakespeare-text 1.0.2 → 1.1.0
raw patch · 6 files changed
+3/−354 lines, 6 filesdep −HUnitdep −hspecdep −shakespeare-textdep ~shakespeare
Dependencies removed: HUnit, hspec, shakespeare-text, template-haskell, text
Dependency ranges changed: shakespeare
Files
- Text/Shakespeare/Text.hs +0/−150
- shakespeare-text.cabal +3/−38
- test.hs +0/−5
- test/ShakespeareTextTest.hs +0/−155
- test/texts/external1.text +0/−5
- test/texts/external2.text +0/−1
− Text/Shakespeare/Text.hs
@@ -1,150 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE CPP #-}-{-# OPTIONS_GHC -fno-warn-missing-fields #-}-module Text.Shakespeare.Text- ( TextUrl- , ToText (..)- , renderTextUrl- , stext- , text- , textFile- , textFileDebug- , textFileReload- , st -- | strict text- , lt -- | lazy text, same as stext :)- -- * Yesod code generation- , codegen- , codegenSt- , codegenFile- , codegenFileReload- ) where--import Language.Haskell.TH.Quote (QuasiQuoter (..))-import Language.Haskell.TH.Syntax-import Data.Text.Lazy.Builder (Builder, fromText, toLazyText, fromLazyText)-import qualified Data.Text as TS-import qualified Data.Text.Lazy as TL-import Text.Shakespeare-import Data.Int (Int32, Int64)--renderTextUrl :: RenderUrl url -> TextUrl url -> TL.Text-renderTextUrl r s = toLazyText $ s r--type TextUrl url = RenderUrl url -> Builder--class ToText a where- toText :: a -> Builder-instance ToText Builder where toText = id-instance ToText [Char ] where toText = fromLazyText . TL.pack-instance ToText TS.Text where toText = fromText-instance ToText TL.Text where toText = fromLazyText--instance ToText Int32 where toText = toText . show-instance ToText Int64 where toText = toText . show-instance ToText Int where toText = toText . show--settings :: Q ShakespeareSettings-settings = do- toTExp <- [|toText|]- wrapExp <- [|id|]- unWrapExp <- [|id|]- return $ defaultShakespeareSettings { toBuilder = toTExp- , wrap = wrapExp- , unwrap = unWrapExp- }---stext, lt, st, text :: QuasiQuoter-stext = - QuasiQuoter { quoteExp = \s -> do- rs <- settings- render <- [|toLazyText|]- rendered <- shakespeareFromString rs { justVarInterpolation = True } s- return (render `AppE` rendered)- }-lt = stext--st = - QuasiQuoter { quoteExp = \s -> do- rs <- settings- render <- [|TL.toStrict . toLazyText|]- rendered <- shakespeareFromString rs { justVarInterpolation = True } s- return (render `AppE` rendered)- }--text = QuasiQuoter { quoteExp = \s -> do- rs <- settings- quoteExp (shakespeare rs) $ filter (/='\r') s- }---textFile :: FilePath -> Q Exp-textFile fp = do- rs <- settings- shakespeareFile rs fp---textFileDebug :: FilePath -> Q Exp-textFileDebug = textFileReload-{-# DEPRECATED textFileDebug "Please use textFileReload instead" #-}--textFileReload :: FilePath -> Q Exp-textFileReload fp = do- rs <- settings- shakespeareFileReload rs fp---- | codegen is designed for generating Yesod code, including templates--- So it uses different interpolation characters that won't clash with templates.-codegenSettings :: Q ShakespeareSettings-codegenSettings = do- toTExp <- [|toText|]- wrapExp <- [|id|]- unWrapExp <- [|id|]- return $ defaultShakespeareSettings { toBuilder = toTExp- , wrap = wrapExp- , unwrap = unWrapExp- , varChar = '~'- , urlChar = '*'- , intChar = '&'- , justVarInterpolation = True -- always!- }---- | codegen is designed for generating Yesod code, including templates--- So it uses different interpolation characters that won't clash with templates.--- You can use the normal text quasiquoters to generate code-codegen :: QuasiQuoter-codegen =- QuasiQuoter { quoteExp = \s -> do- rs <- codegenSettings- render <- [|toLazyText|]- rendered <- shakespeareFromString rs { justVarInterpolation = True } s- return (render `AppE` rendered)- }---- | Generates strict Text--- codegen is designed for generating Yesod code, including templates--- So it uses different interpolation characters that won't clash with templates.-codegenSt :: QuasiQuoter-codegenSt =- QuasiQuoter { quoteExp = \s -> do- rs <- codegenSettings- render <- [|TL.toStrict . toLazyText|]- rendered <- shakespeareFromString rs { justVarInterpolation = True } s- return (render `AppE` rendered)- }--codegenFileReload :: FilePath -> Q Exp-codegenFileReload fp = do- rs <- codegenSettings- render <- [|TL.toStrict . toLazyText|]- rendered <- shakespeareFileReload rs{ justVarInterpolation = True } fp- return (render `AppE` rendered)--codegenFile :: FilePath -> Q Exp-codegenFile fp = do- rs <- codegenSettings- render <- [|TL.toStrict . toLazyText|]- rendered <- shakespeareFile rs{ justVarInterpolation = True } fp- return (render `AppE` rendered)
shakespeare-text.cabal view
@@ -1,10 +1,10 @@ name: shakespeare-text-version: 1.0.2+version: 1.1.0 license: MIT license-file: LICENSE author: Greg Weber <greg@gregweber.info> maintainer: Greg Weber <greg@gregweber.info>-synopsis: Interpolation with quasi-quotation: put variables strings+synopsis: Interpolation with quasi-quotation: put variables strings (deprecated) description: interpolation with quasi-quotation: stick haskell variables into haskell strings .@@ -24,45 +24,10 @@ cabal-version: >= 1.8 build-type: Simple homepage: http://www.yesodweb.com/book/shakespearean-templates-extra-source-files:- test/texts/external1.text- test/texts/external2.text- test/ShakespeareTextTest.hs- test.hs library build-depends: base >= 4 && < 5- , shakespeare >= 1.0 && < 1.3- , template-haskell- , text >= 0.7-- exposed-modules: Text.Shakespeare.Text- ghc-options: -Wall- if impl(ghc >= 7.4)- cpp-options: -DGHC_7_4-- if os(windows)- CPP-Options: "-DWINDOWS"--test-suite test- hs-source-dirs: test- main-is: ../test.hs- type: exitcode-stdio-1.0-- ghc-options: -Wall- build-depends:- shakespeare-text- , base >= 4 && < 5- , HUnit- , hspec >= 1.3- , text >= 0.7-- if impl(ghc >= 7.4)- cpp-options: -DGHC_7_4-- if os(windows)- CPP-Options: "-DWINDOWS"-+ , shakespeare >= 2.0 source-repository head type: git
− test.hs
@@ -1,5 +0,0 @@-import ShakespeareTextTest (spec)-import Test.Hspec--main :: IO ()-main = hspec spec
− test/ShakespeareTextTest.hs
@@ -1,155 +0,0 @@-{-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE TemplateHaskell #-} -module ShakespeareTextTest (spec) where - -import Test.HUnit hiding (Test) -import Test.Hspec - -import Prelude hiding (reverse) -import Text.Shakespeare.Text -import Data.List (intercalate) -import qualified Data.Text.Lazy as TL -import qualified Data.List -import qualified Data.List as L -import Data.Text (Text, pack, unpack) -import Data.Monoid (mappend) - -spec :: Spec -spec = do - describe "shakespeare-text" $ do - it "text" $ do - let var = "var" - let urlp = (Home, [(pack "p", pack "q")]) - flip telper [text|שלום -#{var} -@{Home} -@?{urlp} -^{jmixin} -|] $ intercalate "\n" - [ "שלום" - , var - , "url" - , "url?p=q" - , "var x;" - ] ++ "\n" - - - it "textFile" $ do - let var = "var" - let urlp = (Home, [(pack "p", pack "q")]) - flip telper $(textFile "test/texts/external1.text") $ unlines - [ "שלום" - , var - , "url" - , "url?p=q" - , "var x;" - ] - - - it "textFileReload" $ do - let var = "var" - let urlp = (Home, [(pack "p", pack "q")]) - flip telper $(textFileReload "test/texts/external1.text") $ unlines - [ "שלום" - , var - , "url" - , "url?p=q" - , "var x;" - ] - -{- TODO - it "textFileReload" $ do - let var = "somevar" - test result = telper result $(textFileReload "test/texts/external2.text") - writeFile "test/texts/external2.text" "var #{var} = 1;" - test "var somevar = 1;" - writeFile "test/texts/external2.text" "var #{var} = 2;" - test "var somevar = 2;" - writeFile "test/texts/external2.text" "var #{var} = 1;" - -} - - - it "text module names" $ - let foo = "foo" - double = 3.14 :: Double - int = -5 :: Int in - telper "oof oof 3.14 -5" - [text|#{Data.List.reverse foo} #{L.reverse foo} #{show double} #{show int}|] - - it "stext module names" $ - let foo = "foo" - double = 3.14 :: Double - int = -5 :: Int in - simpT "oof oof 3.14 -5" - [stext|#{Data.List.reverse foo} #{L.reverse foo} #{show double} #{show int}|] - - it "single dollar at and caret" $ do - telper "$@^" [text|$@^|] - telper "#{@{^{" [text|#\{@\{^\{|] - - it "single dollar at and caret" $ do - simpT "$@^" [stext|$@^|] - simpT "#{@{^{" [stext|#\{@\{^\{|] - - it "dollar operator" $ do - let val = (1 :: Int, (2 :: Int, 3 :: Int)) - telper "2" [text|#{ show $ fst $ snd val }|] - telper "2" [text|#{ show $ fst $ snd $ val}|] - - it "dollar operator" $ do - let val = (1 :: Int, (2 :: Int, 3 :: Int)) - simpT "2" [stext|#{ show $ fst $ snd val }|] - simpT "2" [stext|#{ show $ fst $ snd $ val}|] - -simpT :: String -> TL.Text -> Assertion -simpT a b = pack a @=? TL.toStrict b - - -data Url = Home | Sub SubUrl -data SubUrl = SubUrl -render :: Url -> [(Text, Text)] -> Text -render Home qs = pack "url" `mappend` showParams qs -render (Sub SubUrl) qs = pack "suburl" `mappend` showParams qs - -showParams :: [(Text, Text)] -> Text -showParams [] = pack "" -showParams z = - pack $ '?' : intercalate "&" (map go z) - where - go (x, y) = go' x ++ '=' : go' y - go' = concatMap encodeUrlChar . unpack - --- | Taken straight from web-encodings; reimplemented here to avoid extra --- dependencies. -encodeUrlChar :: Char -> String -encodeUrlChar c - -- List of unreserved characters per RFC 3986 - -- Gleaned from http://en.wikipedia.org/wiki/Percent-encoding - | 'A' <= c && c <= 'Z' = [c] - | 'a' <= c && c <= 'z' = [c] - | '0' <= c && c <= '9' = [c] -encodeUrlChar c@'-' = [c] -encodeUrlChar c@'_' = [c] -encodeUrlChar c@'.' = [c] -encodeUrlChar c@'~' = [c] -encodeUrlChar ' ' = "+" -encodeUrlChar y = - let (a, c) = fromEnum y `divMod` 16 - b = a `mod` 16 - showHex' x - | x < 10 = toEnum $ x + (fromEnum '0') - | x < 16 = toEnum $ x - 10 + (fromEnum 'A') - | otherwise = error $ "Invalid argument to showHex: " ++ show x - in ['%', showHex' b, showHex' c] - - - - -jmixin :: TextUrl url -jmixin = [text|var x;|] - -telper :: String -> TextUrl Url -> Assertion -telper res h = pack res @=? TL.toStrict (renderTextUrl render h) - -instance Show Url where - show _ = "FIXME remove this instance show Url"
− test/texts/external1.text
@@ -1,5 +0,0 @@-שלום-#{var}-@{Home}-@?{urlp}-^{jmixin}
− test/texts/external2.text
@@ -1,1 +0,0 @@-var #{var} = 2;