// 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); };