{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Haiji.Syntax.Filter
       ( Filter(..)
       , filter
       ) where

#if MIN_VERSION_base(4,8,0)
#else
import Control.Applicative
#endif
import Data.Attoparsec.Text
import Prelude hiding (filter)

-- http://jinja.pocoo.org/docs/dev/templates/#builtin-filters
data Filter = FilterAbs
            | FilterLength
            deriving Eq
{-
            -- | FilterAttr Identifier
            -- | FilterBatch
            -- | FilterCapitalize
            -- | FilterCenter Int
            -- | FilterDefault
            -- | FilterDictSort
            -- | FilterEscape
            -- | FilterFileSizeFormat
            -- | FilterFirst
            -- | FilterFloat
            -- | FilterForceEscape
            -- | FilterFormat
            -- | FilterGroupBy Variable
            -- | FilterIndent Int Bool
            -- | FilterInt Int Int
            -- | FilterJoin String (Maybe Identifier)
            -- | FilterLast
            -- | FilterList
            -- | FilterLower
            -- | FilterMap
            -- | FilterPprint
            -- | FilterRandom
            -- | FilterReject
            -- | FilterRejectAttr
            -- | FilterReplace
            -- | FilterReverse
            -- | FilterRound
            -- | FilterSafe
            -- | FilterSelect
            -- | FilterSelectAttr
            -- | FilterSlice
            -- | FilterSort
            -- | FilterString
            -- | FilterStripTags
            -- | FilterSum
            -- | FilterTitle
            -- | FilterTrim
            -- | FilterTruncate
            -- | FilterUpper
            -- | FilterURLEncode
            -- | FilterURLize
            -- | FilterWordCount
            -- | FilterWordWrap
            -- | FilterXMLAttr
-}
instance Show Filter where
  show (FilterAbs) = "|abs"
  show (FilterLength) = "|length"

filter :: Parser Filter
filter = char '|' *>
         skipSpace *>
         choice
         [ filterAbs
         , filterLength
         ]

filterAbs :: Parser Filter
filterAbs = string "abs" *> return FilterAbs

filterLength :: Parser Filter
filterLength = string "length" *> return FilterLength