module Erb.Ruby where
import qualified Data.Text as T
import Text.PrettyPrint.ANSI.Leijen
data Value
= Literal !T.Text
| Interpolable ![Expression]
| Symbol !T.Text
| Array ![Expression]
deriving (Show, Ord, Eq)
data Expression
= LookupOperation !Expression !Expression
| PlusOperation !Expression !Expression
| MinusOperation !Expression !Expression
| DivOperation !Expression !Expression
| MultiplyOperation !Expression !Expression
| ShiftLeftOperation !Expression !Expression
| ShiftRightOperation !Expression !Expression
| AndOperation !Expression !Expression
| OrOperation !Expression !Expression
| EqualOperation !Expression !Expression
| DifferentOperation !Expression !Expression
| AboveOperation !Expression !Expression
| AboveEqualOperation !Expression !Expression
| UnderEqualOperation !Expression !Expression
| UnderOperation !Expression !Expression
| RegexpOperation !Expression !Expression
| NotRegexpOperation !Expression !Expression
| NotOperation !Expression
| NegOperation !Expression
| ConditionalValue !Expression !Expression
| Object !Expression
| MethodCall !Expression !Expression
| BlockOperation !T.Text
| Value !Value
| BTrue
| BFalse
| Error !String
deriving (Show, Ord, Eq)
instance Pretty Expression where
pretty (LookupOperation a b) = pretty a <> brackets (pretty b)
pretty (PlusOperation a b) = parens (pretty a <+> text "+" <+> pretty b)
pretty (MinusOperation a b) = parens (pretty a <+> text "-" <+> pretty b)
pretty (DivOperation a b) = parens (pretty a <+> text "/" <+> pretty b)
pretty (MultiplyOperation a b) = parens (pretty a <+> text "*" <+> pretty b)
pretty op = text (show op)
data RubyStatement
= Puts !Expression
| DropPrevSpace !RubyStatement
| DropPrevSpace'
| DropNextSpace !RubyStatement
deriving(Show,Eq)