{-# OPTIONS_GHC -fwarn-unused-imports -fwarn-incomplete-patterns #-} {-# LANGUAGE OverloadedStrings #-} module Text.HSmarty.Types where import qualified Data.Text as T import qualified Data.Aeson as A data Smarty = Smarty { s_name :: FilePath , s_template :: [ SmartyStmt ] } deriving (Eq, Show) type PrintDirective = T.Text data SmartyStmt = SmartyText T.Text | SmartyComment T.Text | SmartyIf If | SmartyForeach Foreach | SmartyPrint Expr [ PrintDirective ] deriving (Eq, Show) data Expr = ExprVar Variable | ExprLit A.Value | ExprFun FunctionCall | ExprBin BinOp deriving (Eq, Show) data Variable = Variable { v_name :: T.Text , v_path :: [T.Text] , v_index :: Maybe Expr , v_prop :: Maybe T.Text } deriving (Eq, Show) data FunctionCall = FunctionCall { f_name :: T.Text , f_args :: [ (T.Text, Expr) ] } deriving (Eq, Show) data BinOp = BinEq Expr Expr | BinNot Expr | BinAnd Expr Expr | BinOr Expr Expr | BinLarger Expr Expr | BinSmaller Expr Expr | BinLargerEq Expr Expr | BinSmallerEq Expr Expr | BinPlus Expr Expr | BinMinus Expr Expr | BinMul Expr Expr | BinDiv Expr Expr deriving (Eq, Show) data If = If { if_cases :: [ (Expr, [SmartyStmt]) ] , if_else :: Maybe [SmartyStmt] } deriving (Eq, Show) data Foreach = Foreach { f_source :: Expr , f_key :: Maybe T.Text , f_item :: T.Text , f_body :: [SmartyStmt] , f_else :: Maybe [SmartyStmt] } deriving (Eq, Show)