示例#1
0
        // Generate a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup)
        => (string name) =>
        {
            var standardFunction = baseLookup(name);

            if (standardFunction != null)
            {
                return(standardFunction);
            }

            if (name.StartsWith("lg."))
            {
                name = name.Substring(3);
            }

            var templateName = ParseTemplateName(name).pureTemplateName;

            if (this.TemplateMap.ContainsKey(templateName))
            {
                return(new ExpressionEvaluator(templateName, ExpressionFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.Object, this.ValidTemplateReference));
            }

            const string template = "template";

            if (name.Equals(template))
            {
                return(new ExpressionEvaluator(template, ExpressionFunctions.Apply(this.TemplateFunction()), ReturnType.Object, this.ValidateTemplateFunction));
            }

            const string fromFile = "fromFile";

            if (name.Equals(fromFile))
            {
                return(new ExpressionEvaluator(fromFile, ExpressionFunctions.Apply(this.FromFile()), ReturnType.String, ExpressionFunctions.ValidateUnaryString));
            }

            const string activityAttachment = "ActivityAttachment";

            if (name.Equals(activityAttachment))
            {
                return(new ExpressionEvaluator(
                           activityAttachment,
                           ExpressionFunctions.Apply(this.ActivityAttachment()),
                           ReturnType.Object,
                           (expr) => ExpressionFunctions.ValidateOrder(expr, null, ReturnType.Object, ReturnType.String)));
            }

            const string isTemplate = "isTemplate";

            if (name.Equals(isTemplate))
            {
                return(new ExpressionEvaluator(isTemplate, ExpressionFunctions.Apply(this.IsTemplate()), ReturnType.Boolean, ExpressionFunctions.ValidateUnaryString));
            }

            return(null);
        };
        // Generate a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup)
        => (string name) =>
        {
            var prebuiltPrefix = "prebuilt.";

            if (name.StartsWith(prebuiltPrefix))
            {
                return(baseLookup(name.Substring(prebuiltPrefix.Length)));
            }

            var templateName = ParseTemplateName(name).pureTemplateName;

            if (this.TemplateMap.ContainsKey(templateName))
            {
                return(new ExpressionEvaluator(templateName, BuiltInFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.Object, this.ValidTemplateReference));
            }

            const string template = "template";

            if (name.Equals(template))
            {
                return(new ExpressionEvaluator(template, BuiltInFunctions.Apply(this.TemplateFunction()), ReturnType.Object, this.ValidateTemplateFunction));
            }

            const string fromFile = "fromFile";

            if (name.Equals(fromFile))
            {
                return(new ExpressionEvaluator(fromFile, BuiltInFunctions.Apply(this.FromFile()), ReturnType.String, BuiltInFunctions.ValidateUnaryString));
            }

            const string activityAttachment = "ActivityAttachment";

            if (name.Equals(activityAttachment))
            {
                return(new ExpressionEvaluator(
                           activityAttachment,
                           BuiltInFunctions.Apply(this.ActivityAttachment()),
                           ReturnType.Object,
                           (expr) => BuiltInFunctions.ValidateOrder(expr, null, ReturnType.Object, ReturnType.String)));
            }

            const string isTemplate = "isTemplate";

            if (name.Equals(isTemplate))
            {
                return(new ExpressionEvaluator(isTemplate, BuiltInFunctions.Apply(this.IsTemplate()), ReturnType.Boolean, BuiltInFunctions.ValidateUnaryString));
            }

            return(baseLookup(name));
        };
示例#3
0
        // Genearte a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup)
        => (string name) =>
        {
            var prebuiltPrefix = "prebuilt.";

            if (name.StartsWith(prebuiltPrefix))
            {
                return(baseLookup(name.Substring(prebuiltPrefix.Length)));
            }

            if (this.TemplateMap.ContainsKey(name))
            {
                return(new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.Object, this.ValidTemplateReference));
            }

            const string template = "template";

            if (name.Equals(template))
            {
                return(new ExpressionEvaluator(template, BuiltInFunctions.Apply(this.TemplateFunction()), ReturnType.Object, this.ValidateTemplateFunction));
            }

            const string fromFile = "fromFile";

            if (name.Equals(fromFile))
            {
                return(new ExpressionEvaluator(fromFile, BuiltInFunctions.Apply(this.FromFile()), ReturnType.String, this.ValidateFromFile));
            }

            const string activityAttachment = "ActivityAttachment";

            if (name.Equals(activityAttachment))
            {
                return(new ExpressionEvaluator(activityAttachment, BuiltInFunctions.Apply(this.ActivityAttachment()), ReturnType.Object, this.ValidateActivityAttachment));
            }

            return(baseLookup(name));
        };
        // Genearte a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup, bool isExpander)
        => (string name) =>
        {
            var prebuiltPrefix = "prebuilt.";

            if (name.StartsWith(prebuiltPrefix))
            {
                return(baseLookup(name.Substring(prebuiltPrefix.Length)));
            }

            if (this.TemplateMap.ContainsKey(name))
            {
                if (isExpander)
                {
                    return(new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateExpander(name)), ReturnType.String, this.ValidTemplateReference));
                }
                else
                {
                    return(new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.String, this.ValidTemplateReference));
                }
            }

            return(baseLookup(name));
        };
示例#5
0
        // Genearte a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup)
        => (string name) =>
        {
            var prebuiltPrefix = "prebuilt.";

            if (name.StartsWith(prebuiltPrefix))
            {
                return(baseLookup(name.Substring(prebuiltPrefix.Length)));
            }

            if (this.TemplateMap.ContainsKey(name))
            {
                return(new ExpressionEvaluator(name, BuiltInFunctions.Apply(this.TemplateEvaluator(name)), ReturnType.Object, this.ValidTemplateReference));
            }

            const string lgTemplate = "lgTemplate";

            if (name.Equals(lgTemplate))
            {
                return(new ExpressionEvaluator(lgTemplate, BuiltInFunctions.Apply(this.LgTemplate()), ReturnType.Object, this.ValidateLgTemplate));
            }

            return(baseLookup(name));
        };
示例#6
0
#pragma warning restore CA2225 // Operator overloads have named alternates

        /// <summary>
        /// Parse an expression string into an expression object.
        /// </summary>
        /// <param name="expression">expression string.</param>
        /// <param name="lookup">Optional function lookup when parsing the expression. Default is Expression.Lookup which uses Expression.Functions table.</param>
        /// <returns>expression object.</returns>
        public static Expression Parse(string expression, EvaluatorLookup lookup = null) => new ExpressionParser(lookup ?? Expression.Lookup).Parse(expression?.TrimStart('='));
示例#7
0
 public ExpressionTransformer(EvaluatorLookup lookup)
 {
     _lookupFunction = lookup;
 }
示例#8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionParser"/> class.
 /// Constructor.
 /// </summary>
 /// <param name="lookup">Delegate to lookup evaluation information from type string.</param>
 public ExpressionParser(EvaluatorLookup lookup = null)
 {
     EvaluatorLookup = lookup ?? Expression.Lookup;
 }
示例#9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionEngine"/> class.
 /// Constructor.
 /// </summary>
 /// <param name="lookup">If present delegate to lookup evaluation information from type string.</param>
 public ExpressionEngine(EvaluatorLookup lookup = null)
 {
     EvaluatorLookup = lookup ?? BuiltInFunctions.Lookup;
 }
示例#10
0
        // Generate a new lookup function based on one lookup function
        private EvaluatorLookup CustomizedEvaluatorLookup(EvaluatorLookup baseLookup, bool isExpander)
        => (string name) =>
        {
            var standardFunction = baseLookup(name);

            if (standardFunction != null)
            {
                return(standardFunction);
            }

            var pointIndex = name.IndexOf('.');
            if (pointIndex > 0)
            {
                var alias = name.Substring(0, pointIndex);
                if (Templates.NamedReferences.ContainsKey(alias))
                {
                    var realTemplateName = name.Substring(pointIndex + 1);
                    return(new ExpressionEvaluator(realTemplateName, FunctionUtils.Apply(this.EvaluateWithTemplates(realTemplateName, Templates.NamedReferences[alias])), ReturnType.Object));
                }
            }

            if (name.StartsWith("lg.", StringComparison.Ordinal))
            {
                name = name.Substring(3);
            }

            if (this.TemplateMap.ContainsKey(name))
            {
                if (isExpander)
                {
                    return(new ExpressionEvaluator(name, FunctionUtils.Apply(this.TemplateExpander(name)), ReturnType.Object, this.ValidTemplateReference));
                }
                else
                {
                    return(new ExpressionEvaluator(name, FunctionUtils.Apply(this.TemplateEvaluator(name)), ReturnType.Object, this.ValidTemplateReference));
                }
            }

            const string template = "template";

            if (name.Equals(template, StringComparison.Ordinal))
            {
                return(new ExpressionEvaluator(template, FunctionUtils.Apply(this.TemplateFunction()), ReturnType.Object, this.ValidateTemplateFunction));
            }

            const string fromFile = "fromFile";

            if (name.Equals(fromFile, StringComparison.Ordinal))
            {
                return(new ExpressionEvaluator(fromFile, FunctionUtils.Apply(this.FromFile()), ReturnType.String, ValidateFromFile));
            }

            const string activityAttachment = "ActivityAttachment";

            if (name.Equals(activityAttachment, StringComparison.Ordinal))
            {
                return(new ExpressionEvaluator(
                           activityAttachment,
                           FunctionUtils.Apply(this.ActivityAttachment()),
                           ReturnType.Object,
                           (expr) => FunctionUtils.ValidateOrder(expr, null, ReturnType.Object, ReturnType.String)));
            }

            const string isTemplate = "isTemplate";

            if (name.Equals(isTemplate, StringComparison.Ordinal))
            {
                return(new ExpressionEvaluator(isTemplate, FunctionUtils.Apply(this.IsTemplate()), ReturnType.Boolean, FunctionUtils.ValidateUnaryString));
            }

            const string expandText = "expandText";

            if (name.Equals(expandText, StringComparison.Ordinal))
            {
                return(new ExpressionEvaluator(expandText, FunctionUtils.Apply(this.ExpandText()), ReturnType.Object, FunctionUtils.ValidateUnaryString));
            }

            return(null);
        };