private static IDictionary GetStandardFunctions()

in libraries/AdaptiveExpressions/ExpressionFunctions.cs [29:225]


        private static IDictionary<string, ExpressionEvaluator> GetStandardFunctions()
        {
            var functions = new List<ExpressionEvaluator>
            {
                new BuiltinFunctions.Abs(),
                new BuiltinFunctions.Accessor(),
                new BuiltinFunctions.Add(),
                new BuiltinFunctions.AddDays(),
                new BuiltinFunctions.AddHours(),
                new BuiltinFunctions.AddMinutes(),
                new BuiltinFunctions.AddOrdinal(),
                new BuiltinFunctions.AddProperty(),
                new BuiltinFunctions.AddSeconds(),
                new BuiltinFunctions.AddToTime(),
                new BuiltinFunctions.All(),
                new BuiltinFunctions.And(),
                new BuiltinFunctions.Any(),
                new BuiltinFunctions.Average(),
                new BuiltinFunctions.Base64(),
                new BuiltinFunctions.Base64ToBinary(),
                new BuiltinFunctions.Base64ToString(),
                new BuiltinFunctions.Binary(),
                new BuiltinFunctions.Bool(),
                new BuiltinFunctions.Ceiling(),
                new BuiltinFunctions.Coalesce(),
                new BuiltinFunctions.Concat(),
                new BuiltinFunctions.Contains(),
                new BuiltinFunctions.ConvertFromUtc(),
                new BuiltinFunctions.ConvertToUtc(),
                new BuiltinFunctions.Count(),
                new BuiltinFunctions.CountWord(),
                new BuiltinFunctions.CreateArray(),
                new BuiltinFunctions.DataUri(),
                new BuiltinFunctions.DataUriToBinary(),
                new BuiltinFunctions.DataUriToString(),
                new BuiltinFunctions.Date(),
                new BuiltinFunctions.DateReadBack(),
                new BuiltinFunctions.DateTimeDiff(),
                new BuiltinFunctions.DayOfMonth(),
                new BuiltinFunctions.DayOfWeek(),
                new BuiltinFunctions.DayOfYear(),
                new BuiltinFunctions.Divide(),
                new BuiltinFunctions.Element(),
                new BuiltinFunctions.Empty(),
                new BuiltinFunctions.EndsWith(),
                new BuiltinFunctions.EOL(),
                new BuiltinFunctions.Equal(),
                new BuiltinFunctions.Exists(),
                new BuiltinFunctions.First(),
                new BuiltinFunctions.Flatten(),
                new BuiltinFunctions.Float(),
                new BuiltinFunctions.Floor(),
                new BuiltinFunctions.Foreach(),
                new BuiltinFunctions.FormatDateTime(),
                new BuiltinFunctions.FormatEpoch(),
                new BuiltinFunctions.FormatNumber(),
                new BuiltinFunctions.FormatTicks(),
                new BuiltinFunctions.GetFutureTime(),
                new BuiltinFunctions.GetNextViableDate(),
                new BuiltinFunctions.GetNextViableTime(),
                new BuiltinFunctions.GetPastTime(),
                new BuiltinFunctions.GetPreviousViableDate(),
                new BuiltinFunctions.GetPreviousViableTime(),
                new BuiltinFunctions.GetProperty(),
                new BuiltinFunctions.GetTimeOfDay(),
                new BuiltinFunctions.GreaterThan(),
                new BuiltinFunctions.GreaterThanOrEqual(),
                new BuiltinFunctions.If(),
                new BuiltinFunctions.Ignore(),
                new BuiltinFunctions.IndexOf(),
                new BuiltinFunctions.IndicesAndValues(),
                new BuiltinFunctions.Int(),
                new BuiltinFunctions.Intersection(),
                new BuiltinFunctions.IsArray(),
                new BuiltinFunctions.IsBoolean(),
                new BuiltinFunctions.IsDate(),
                new BuiltinFunctions.IsDateRange(),
                new BuiltinFunctions.IsDateTime(),
                new BuiltinFunctions.IsDefinite(),
                new BuiltinFunctions.IsDuration(),
                new BuiltinFunctions.IsFloat(),
                new BuiltinFunctions.IsInteger(),
                new BuiltinFunctions.IsMatch(),
                new BuiltinFunctions.IsObject(),
                new BuiltinFunctions.IsPresent(),
                new BuiltinFunctions.IsString(),
                new BuiltinFunctions.IsTime(),
                new BuiltinFunctions.IsTimeRange(),
                new BuiltinFunctions.Join(),
                new BuiltinFunctions.JPath(),
                new BuiltinFunctions.Json(),
                new BuiltinFunctions.JsonStringify(),
                new BuiltinFunctions.Last(),
                new BuiltinFunctions.LastIndexOf(),
                new BuiltinFunctions.Length(),
                new BuiltinFunctions.LessThan(),
                new BuiltinFunctions.LessThanOrEqual(),
                new BuiltinFunctions.Max(),
                new BuiltinFunctions.Merge(),
                new BuiltinFunctions.Min(),
                new BuiltinFunctions.Mod(),
                new BuiltinFunctions.Month(),
                new BuiltinFunctions.Multiply(),
                new BuiltinFunctions.NewGuid(),
                new BuiltinFunctions.Not(),
                new BuiltinFunctions.NotEqual(),
                new BuiltinFunctions.Optional(),
                new BuiltinFunctions.Or(),
                new BuiltinFunctions.Power(),
                new BuiltinFunctions.Rand(),
                new BuiltinFunctions.Range(),
                new BuiltinFunctions.RemoveProperty(),
                new BuiltinFunctions.Replace(),
                new BuiltinFunctions.ReplaceIgnoreCase(),
                new BuiltinFunctions.Reverse(),
                new BuiltinFunctions.Round(),
                new BuiltinFunctions.Select(),
                new BuiltinFunctions.SentenceCase(),
                new BuiltinFunctions.SetPathToValue(),
                new BuiltinFunctions.SetProperty(),
                new BuiltinFunctions.Skip(),
                new BuiltinFunctions.SortBy(),
                new BuiltinFunctions.SortByDescending(),
                new BuiltinFunctions.Split(),
                new BuiltinFunctions.Sqrt(),
                new BuiltinFunctions.StartOfDay(),
                new BuiltinFunctions.StartOfHour(),
                new BuiltinFunctions.StartOfMonth(),
                new BuiltinFunctions.StartsWith(),
                new BuiltinFunctions.String(),
                new BuiltinFunctions.StringOrValue(),
                new BuiltinFunctions.SubArray(),
                new BuiltinFunctions.Substring(),
                new BuiltinFunctions.Subtract(),
                new BuiltinFunctions.SubtractFromTime(),
                new BuiltinFunctions.Sum(),
                new BuiltinFunctions.Take(),
                new BuiltinFunctions.Ticks(),
                new BuiltinFunctions.TicksToDays(),
                new BuiltinFunctions.TicksToHours(),
                new BuiltinFunctions.TicksToMinutes(),
                new BuiltinFunctions.TimexResolve(),
                new BuiltinFunctions.TitleCase(),
                new BuiltinFunctions.ToLower(),
                new BuiltinFunctions.ToUpper(),
                new BuiltinFunctions.Trim(),
                new BuiltinFunctions.Union(),
                new BuiltinFunctions.Unique(),
                new BuiltinFunctions.UriComponent(),
                new BuiltinFunctions.UriComponentToString(),
                new BuiltinFunctions.UriHost(),
                new BuiltinFunctions.UriPath(),
                new BuiltinFunctions.UriPathAndQuery(),
                new BuiltinFunctions.UriPort(),
                new BuiltinFunctions.UriQuery(),
                new BuiltinFunctions.UriScheme(),
                new BuiltinFunctions.UtcNow(),
                new BuiltinFunctions.Where(),
                new BuiltinFunctions.Xml(),
                new BuiltinFunctions.XPath(),
                new BuiltinFunctions.Year(),
            };

            var lookup = new Dictionary<string, ExpressionEvaluator>();
            foreach (var function in functions)
            {
                lookup.Add(function.Type, function);
            }

            // Attach negations
            lookup[ExpressionType.LessThan].Negation = lookup[ExpressionType.GreaterThanOrEqual];
            lookup[ExpressionType.LessThanOrEqual].Negation = lookup[ExpressionType.GreaterThan];
            lookup[ExpressionType.Equal].Negation = lookup[ExpressionType.NotEqual];

            // Math aliases
            lookup.Add("add", lookup[ExpressionType.Add]); // more than 1 params
            lookup.Add("div", lookup[ExpressionType.Divide]); // more than 1 params
            lookup.Add("mul", lookup[ExpressionType.Multiply]); // more than 1 params
            lookup.Add("sub", lookup[ExpressionType.Subtract]); // more than 1 params
            lookup.Add("exp", lookup[ExpressionType.Power]); // more than 1 params
            lookup.Add("mod", lookup[ExpressionType.Mod]);

            // Comparison aliases
            lookup.Add("and", lookup[ExpressionType.And]);
            lookup.Add("equals", lookup[ExpressionType.Equal]);
            lookup.Add("greater", lookup[ExpressionType.GreaterThan]);
            lookup.Add("greaterOrEquals", lookup[ExpressionType.GreaterThanOrEqual]);
            lookup.Add("less", lookup[ExpressionType.LessThan]);
            lookup.Add("lessOrEquals", lookup[ExpressionType.LessThanOrEqual]);
            lookup.Add("not", lookup[ExpressionType.Not]);
            lookup.Add("or", lookup[ExpressionType.Or]);

            lookup.Add("&", lookup[ExpressionType.Concat]);
            lookup.Add("??", lookup[ExpressionType.Coalesce]);

            return new ReadOnlyDictionary<string, ExpressionEvaluator>(lookup);
        }