haiji-0.2.0.0: src/Text/Haiji.hs
-- |
-- Module : Text.Haiji
-- Copyright : 2015 Noriyuki OHKAWA
-- License : BSD3
--
-- Maintainer : n.ohkawa@gmail.com
-- Stability : experimental
-- Portability : portable
--
-- Haiji is a template engine which is subset of Jinja2.
-- This is designed to free from the unintended rendering result by strictly typed variable interpolation.
--
-- Rendering result will be same as Jinja2's one. However, Haiji doesn't aim to be Jinja2.
-- Some feature and built-in Test\/Function\/Filter of Jinja2 allow rendering time type inspection.
-- Haiji will not support these type unsafe features.
-- Haiji generates a statically typed template by Template Haskell,
-- and check that a given dictionary includes enough information to render template.
--
-- >{-# LANGUAGE OverloadedStrings #-}
-- >{-# LANGUAGE TemplateHaskell #-}
-- >{-# LANGUAGE QuasiQuotes #-}
-- >{-# LANGUAGE DataKinds #-}
-- >module Main where
-- >
-- >import Data.Default
-- >import Text.Haiji
-- >import qualified Data.Text as T
-- >import qualified Data.Text.Lazy as LT
-- >import qualified Data.Text.Lazy.IO as LT
-- >
-- >main :: IO ()
-- >main = LT.putStr
-- > $ render $(haijiFile def "example.tmpl")
-- > $ [key|a_variable|] ("Hello,World!" :: LT.Text) `merge`
-- > [key|navigation|] [ [key|caption|] cap `merge` [key|href|] href
-- > | (cap, href) <- [ ("A", "content/a.html")
-- > , ("B", "content/b.html")
-- > ] :: [ (T.Text, String) ]
-- > ] `merge`
-- > [key|foo|] (1 :: Int) `merge`
-- > [key|bar|] ("" :: String)
module Text.Haiji
( -- * Typed Template
-- $template
Template
-- ** Generators
, haiji
, haijiFile
-- ** Renderer
, render
-- * Rendering Environment
, Environment
, autoEscape
-- * Dictionary
, Dict
, toDict
, empty
-- ** Builder
, key
, merge
) where
import Text.Haiji.TH
import Text.Haiji.Types
import Text.Haiji.Dictionary
-- $template
-- >{{ foo }}
--
-- For example, this Jinja2 template requires "foo".
-- A dictionary which provides a variable "foo" is required to render it.
-- If a variable "foo" does not exist in a given dictionary,
-- Jinja2 evaluates it to an empty string by default,
-- whereas haiji treats this case as compile error.