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()); } } } }
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); }
public object EvaluateObject(RenderingKey key) { if (key == null) { return(null); } return(key.Evaluate(this)); }
public NegationKey(RenderingKey body) : base() { this.body = body; }
public NumericFormatNode(Document document, string key, Dictionary <string, decimal> dictionary) : base(document) { this.key = RenderingKey.Parse(key, RenderingType.Numeric); this.dictionary = dictionary; }
public EvalNode(Document document, string key, bool escape) : base(document) { this.key = RenderingKey.Parse(key, RenderingType.Any); this.escape = escape; }
public CountNode(Document document, string collection) : base(document) { this.key = RenderingKey.Parse(collection, RenderingType.Collection); }
public IfNode(Document document, string condition) : base(document) { this.condition = RenderingKey.Parse(condition, RenderingType.Any); }
public SetNode(Document document, string key) : base(document) { this.key = RenderingKey.Parse(key, RenderingType.Any); }
public CaseNode(Document document, string key, CaseKind kind) : base(document) { this.key = RenderingKey.Parse(key, RenderingType.String); this.kind = kind; }
public SpanNode(Document document, string key) : base(document) { this.key = RenderingKey.Parse(key, RenderingType.DateTime); }
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; }
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)); }