Example #1
0
        public override void Execute(RenderingContext context)
        {
            var temp = context.EvaluateObject(key);

            if (temp != null)
            {
                decimal num;

                if (decimal.TryParse(temp.ToString(), out num))
                {
                    string key = null;
                    foreach (var entry in dictionary)
                    {
                        if (num >= entry.Value || num <= -entry.Value)
                        {
                            key = entry.Key;
                        }
                    }

                    if (key != null)
                    {
                        num /= dictionary[key];
                        num  = num.TruncateEx(2);
                        context.output.Append(num.ToString());
                        context.output.Append(key);
                    }
                    else
                    {
                        context.output.Append(num.ToString());
                    }
                }
            }
        }
Example #2
0
        internal CompositeRenderingKey(KeyOperator op, string leftText, string rightText)
        {
            Operator = op;

            RenderingType expectedType;

            switch (Operator)
            {
            case KeyOperator.Equal:
            case KeyOperator.Different:
            case KeyOperator.Assignment:
            case KeyOperator.Contains:
            case KeyOperator.And:
            case KeyOperator.Or:
                expectedType = RenderingType.Any;
                break;

            case KeyOperator.Begins:
            case KeyOperator.Ends:
                expectedType = RenderingType.String;
                break;

            default:
                expectedType = RenderingType.Numeric;
                break;
            }

            this.leftSide  = RenderingKey.Parse(leftText, expectedType);
            this.rightSide = RenderingKey.Parse(rightText, expectedType);
        }
Example #3
0
        public object EvaluateObject(RenderingKey key)
        {
            if (key == null)
            {
                return(null);
            }

            return(key.Evaluate(this));
        }
Example #4
0
 public NegationKey(RenderingKey body) : base()
 {
     this.body = body;
 }
Example #5
0
 public NumericFormatNode(Document document, string key, Dictionary <string, decimal> dictionary) : base(document)
 {
     this.key        = RenderingKey.Parse(key, RenderingType.Numeric);
     this.dictionary = dictionary;
 }
Example #6
0
 public EvalNode(Document document, string key, bool escape) : base(document)
 {
     this.key    = RenderingKey.Parse(key, RenderingType.Any);
     this.escape = escape;
 }
Example #7
0
 public CountNode(Document document, string collection) : base(document)
 {
     this.key = RenderingKey.Parse(collection, RenderingType.Collection);
 }
Example #8
0
 public IfNode(Document document, string condition) : base(document)
 {
     this.condition = RenderingKey.Parse(condition, RenderingType.Any);
 }
Example #9
0
 public SetNode(Document document, string key) : base(document)
 {
     this.key = RenderingKey.Parse(key, RenderingType.Any);
 }
Example #10
0
 public CaseNode(Document document, string key, CaseKind kind) : base(document)
 {
     this.key  = RenderingKey.Parse(key, RenderingType.String);
     this.kind = kind;
 }
Example #11
0
 public SpanNode(Document document, string key) : base(document)
 {
     this.key = RenderingKey.Parse(key, RenderingType.DateTime);
 }
Example #12
0
 public DateNode(Document document, string key, string format = "dd yyyy | hh:mm tt") : base(document)
 {
     this.key    = RenderingKey.Parse(key, RenderingType.DateTime);
     this.format = " " + format;
 }
Example #13
0
        public static RenderingKey Parse(string key, RenderingType expectedType)
        {
            if (key.StartsWith("!"))
            {
                if (expectedType != RenderingType.Bool && expectedType != RenderingType.Any)
                {
                    throw new Exception("expected bool");
                }

                key = key.Substring(1);
                var body = Parse(key, expectedType);
                return(new NegationKey(body));
            }

            string operatorMatch = null;
            int    operatorIndex = -1;

            foreach (var symbol in operatorSymbols.Keys)
            {
                var index = key.IndexOf(symbol);

                if (index >= 0)
                {
                    if (operatorMatch != null && GetOperatorPriority(symbol) <= GetOperatorPriority(operatorMatch))
                    {
                        continue;
                    }

                    operatorIndex = index;
                    operatorMatch = symbol;
                }
            }

            if (operatorMatch != null)
            {
                var leftText = key.Substring(0, operatorIndex).Trim();
                var righText = key.Substring(operatorIndex + operatorMatch.Length).Trim();

                var op = operatorSymbols[operatorMatch];
                return(new CompositeRenderingKey(op, leftText, righText));
            }

            if (key.StartsWith("@"))
            {
                return(new GlobalKey(key.Substring(1)));
            }

            switch (key)
            {
            case "true":
                if (expectedType != RenderingType.Bool && expectedType != RenderingType.Any)
                {
                    throw new Exception("expected bool");
                }

                return(new LiteralKey(true, RenderingType.Bool));

            case "false":
                if (expectedType != RenderingType.Bool && expectedType != RenderingType.Any)
                {
                    throw new Exception("expected bool");
                }

                return(new LiteralKey(false, RenderingType.Bool));

            case "this":
                return(new SelfKey());
            }

            if (key.StartsWith("'") && key.EndsWith("'"))
            {
                if (expectedType != RenderingType.String && expectedType != RenderingType.Any)
                {
                    throw new Exception("unexpected string");
                }

                var str = key.Substring(1, key.Length - 2);
                return(new LiteralKey(str, RenderingType.String));
            }

            decimal number;

            if (decimal.TryParse(key, out number))
            {
                if (expectedType != RenderingType.Numeric && expectedType != RenderingType.Any)
                {
                    throw new Exception("expected number");
                }

                return(new LiteralKey(number, RenderingType.Numeric));
            }

            if (key.StartsWith("this."))
            {
                key = key.Substring(5);
                return(RenderingKey.Parse(key, expectedType));
            }

            return(new PathRenderingKey(key));
        }