shakespeare 2.0.3 → 2.0.4
raw patch · 4 files changed
+40/−2 lines, 4 files
Files
- ChangeLog.md +4/−0
- Text/Shakespeare/Text.hs +24/−1
- shakespeare.cabal +1/−1
- test/Text/Shakespeare/TextSpec.hs +11/−0
ChangeLog.md view
@@ -1,3 +1,7 @@+### 2.0.4++* [Add multiline literal aligned with bar #148](https://github.com/yesodweb/shakespeare/pull/148)+ ### 2.0.3 * `cassiusMixin` added
Text/Shakespeare/Text.hs view
@@ -14,6 +14,8 @@ , textFileReload , st -- | strict text , lt -- | lazy text, same as stext :)+ , sbt -- | strict text whose left edge is aligned with bar ('|')+ , lbt -- | lazy text, whose left edge is aligned with bar ('|') -- * Yesod code generation , codegen , codegenSt@@ -57,7 +59,7 @@ } -stext, lt, st, text :: QuasiQuoter+stext, lt, st, text, lbt, sbt :: QuasiQuoter stext = QuasiQuoter { quoteExp = \s -> do rs <- settings@@ -80,6 +82,27 @@ quoteExp (shakespeare rs) $ filter (/='\r') s } +dropBar :: [TL.Text] -> [TL.Text]+dropBar [] = []+dropBar (c:cx) = c:dropBar' cx+ where+ dropBar' txt = reverse $ drop 1 $ map (TL.drop 1 . TL.dropWhile (/= '|')) $ reverse txt++lbt = + QuasiQuoter { quoteExp = \s -> do+ rs <- settings+ render <- [|TL.unlines . dropBar . TL.lines . toLazyText|]+ rendered <- shakespeareFromString rs { justVarInterpolation = True } s+ return (render `AppE` rendered)+ }++sbt = + QuasiQuoter { quoteExp = \s -> do+ rs <- settings+ render <- [|TL.toStrict . TL.unlines . dropBar . TL.lines . toLazyText|]+ rendered <- shakespeareFromString rs { justVarInterpolation = True } s+ return (render `AppE` rendered)+ } textFile :: FilePath -> Q Exp textFile fp = do
shakespeare.cabal view
@@ -1,5 +1,5 @@ name: shakespeare-version: 2.0.3+version: 2.0.4 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>
test/Text/Shakespeare/TextSpec.hs view
@@ -101,6 +101,17 @@ simpT "2" [stext|#{ show $ fst $ snd val }|] simpT "2" [stext|#{ show $ fst $ snd $ val}|] + it "aligned text with bar" $ do + let val = 3 :: Int + simpT "hoge\r\n3\r\n1\r\n" (TL.fromStrict [sbt|hoge + |#{val} + |1 + |]) + simpT "hoge\r\n3\r\n1\r\n" [lbt|hoge + |#{val} + |1 + |] + simpT :: String -> TL.Text -> Assertion simpT a b = pack a @=? TL.toStrict b