// 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)); };
// 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)); };
// 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)); };
#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('='));
public ExpressionTransformer(EvaluatorLookup lookup) { _lookupFunction = lookup; }
/// <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; }
/// <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; }
// 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); };