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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 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),
     };
 }
Пример #4
0
 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
         }
     };
 }
Пример #5
0
 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
         }
     };
 }
Пример #6
0
 protected abstract void Compare(AbstractTemplateElement left, AbstractTemplateElement right);