public override EvaluateTemplateElement Deserialize(TemplateTokenizer tokenizer, AbstractTemplateElement root) { var result = new EvaluateTemplateElement(root) { Expression = ConditionDeserializer.Deserialize(tokenizer.AdvanceUntilChar(']').InfoAfter("[", int.MaxValue), new Dictionary <string, AbstractConditionPart>()) }; tokenizer.AdvanceUntilChar('>'); return(result); }
public override RangeTemplateElement Deserialize(TemplateTokenizer tokenizer, AbstractTemplateElement root) { var result = new RangeTemplateElement(root); tokenizer.AdvanceUntilChar(' '); tokenizer.AdvanceWhileChar(' '); if (tokenizer.CurrentChar == '[') { var condition = ConditionDeserializer.Deserialize(tokenizer.AdvanceUntilChar(']').InfoAfter("[", int.MaxValue), new Dictionary <string, AbstractConditionPart>()); var opCond = condition as OperationConditionPart; if (!(opCond?.LeftSide is VariableConditionPart) || opCond.Operator != ConditionPartOperatorEnum.Range || !(opCond.RightSide is OperationConditionPart)) { throw new ArgumentException("Invalid FOR condition"); } result.Variable = (VariableConditionPart)opCond.LeftSide; var cond = (OperationConditionPart)opCond.RightSide; if (cond.Operator != ConditionPartOperatorEnum.To && cond.Operator != ConditionPartOperatorEnum.Until) { throw new ArgumentException("Invalid FOR condition"); } result.InludeMaximum = cond.Operator == ConditionPartOperatorEnum.To; result.Minimum = cond.LeftSide; result.Maximum = cond.RightSide; tokenizer.AdvanceUntilChar('>'); tokenizer.Advance(); } else { throw new ArgumentException("FOR must have a condition in []"); } result.Elements = FindElements(result, tokenizer, "/FOR").ToArray(); tokenizer.AdvanceUntilChar('>'); return(result); }
public TemplateTest() { Elements = new AbstractTemplateElement[] { new AnimalDefineTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine }, new ChoiceDefineTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine + "Hey " }, new BuddyConditionalTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine + "This is some cool stuff: {CoolStuff}" + Environment.NewLine }, new StaticTemplateElement(this) { Content = "<:BR:>" }, new StaticTemplateElement(this) { Content = Environment.NewLine + "Cars:" + Environment.NewLine }, new CarsEnumeratorTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine }, new StaticTemplateElement(this) { Content = "<:BR:>" }, new StaticTemplateElement(this) { Content = Environment.NewLine + "Choices: " + Environment.NewLine }, new ChoicesEnumeratorTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine }, new StaticTemplateElement(this) { Content = "<:BR:>" }, new StaticTemplateElement(this) { Content = Environment.NewLine + "People" + Environment.NewLine }, new PeopleEnumeratorTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine + "*******" + Environment.NewLine }, new ToRangeTemplateElement(this), new StaticTemplateElement(this) { Content = " " + Environment.NewLine + " " + Environment.NewLine }, new UntilRangeTemplateElement(this), new StaticTemplateElement(this) { Content = Environment.NewLine }, new DoraCarConditionalTemplateElement(this), }; }
public ChocolateConditionalTemplateElement(AbstractTemplateElement parent) : base(parent) { Condition = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Chocolate" }, RightSide = new LiteralConditionPart { Value = "White" }, Operator = ConditionPartOperatorEnum.Equals }, RightSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Fruit" }, RightSide = new LiteralConditionPart { Value = "Lemon" }, Operator = ConditionPartOperatorEnum.Equals }, Operator = ConditionPartOperatorEnum.And }, RightSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Chocolate" }, RightSide = new LiteralConditionPart { Value = "Dark" }, Operator = ConditionPartOperatorEnum.Equals }, RightSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Fruit" }, RightSide = new LiteralConditionPart { Value = "Strawberry" }, Operator = ConditionPartOperatorEnum.Equals }, Operator = ConditionPartOperatorEnum.And }, Operator = ConditionPartOperatorEnum.Or }; ConditionTrueElements = new AbstractTemplateElement[] { new StaticTemplateElement(this) { Content = Environment.NewLine + "* The mix of {Chocolate} Chocolate and {Fruit} is perfect" + Environment.NewLine } }; ConditionFalseElements = new AbstractTemplateElement[] { new StaticTemplateElement(this) { Content = Environment.NewLine }, new BitternessChocolateConditionalTemplateElement(this), new StaticTemplateElement(this) { Content = " " + Environment.NewLine + "* this is a cool fruit: {Fruit}" + Environment.NewLine } }; }
public BobAndBillyConditionalTemplateElement(AbstractTemplateElement parent) : base(parent) { Condition = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Person" }, RightSide = new LiteralConditionPart { Value = "Bob" }, Operator = ConditionPartOperatorEnum.Different }, RightSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Person" }, RightSide = new LiteralConditionPart { Value = "Billy" }, Operator = ConditionPartOperatorEnum.Different }, Operator = ConditionPartOperatorEnum.And }, RightSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Fruit" }, RightSide = new LiteralConditionPart { Value = "Orange" }, Operator = ConditionPartOperatorEnum.Equals }, RightSide = new OperationConditionPart { LeftSide = new LiteralConditionPart { Value = "Kiwi" }, RightSide = new VariableConditionPart { VariableName = "Fruit" }, Operator = ConditionPartOperatorEnum.Equals }, Operator = ConditionPartOperatorEnum.Or }, Operator = ConditionPartOperatorEnum.And }, RightSide = new OperationConditionPart { LeftSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Fruit" }, RightSide = new LiteralConditionPart { Value = "Pineapple" }, Operator = ConditionPartOperatorEnum.Equals }, RightSide = new OperationConditionPart { LeftSide = new VariableConditionPart { VariableName = "Fruit" }, RightSide = new LiteralConditionPart { Value = "Apple" }, Operator = ConditionPartOperatorEnum.Equals }, Operator = ConditionPartOperatorEnum.Or }, Operator = ConditionPartOperatorEnum.Or }; ConditionTrueElements = new AbstractTemplateElement[] { new StaticTemplateElement(this) { Content = Environment.NewLine + "* This {Person} really appreciates {Fruit}" + Environment.NewLine } }; }
protected abstract void Compare(AbstractTemplateElement left, AbstractTemplateElement right);