|
@@ -34,7 +34,7 @@ namespace InABox.DynamicGrid
|
|
|
set => Editor.Text = value;
|
|
|
}
|
|
|
|
|
|
- private static void RegisterFunctionTemplate(string group, string name, List<string> parameters)
|
|
|
+ private static void RegisterFunctionTemplate(string group, string name, string? description, List<IFunctionParameter> parameters)
|
|
|
{
|
|
|
var groupList = FunctionTemplates.FirstOrDefault(x => x.Item1 == group)?.Item2;
|
|
|
if(groupList is null)
|
|
@@ -46,76 +46,95 @@ namespace InABox.DynamicGrid
|
|
|
groupList.Add(new FunctionTemplate
|
|
|
{
|
|
|
Name = name,
|
|
|
- Parameters = parameters.ToList()
|
|
|
+ Parameters = parameters,
|
|
|
+ Description = description ?? ""
|
|
|
});
|
|
|
}
|
|
|
private static void RegisterFunctionTemplate(string group, string name, params string[] parameters)
|
|
|
- => RegisterFunctionTemplate(group, name, parameters.ToList());
|
|
|
+ => RegisterFunctionTemplate(group, name, null, parameters.Select(x =>
|
|
|
+ {
|
|
|
+ var parts = x.Split(' ');
|
|
|
+ if (parts.Length == 1)
|
|
|
+ {
|
|
|
+ return new FunctionParameter(parts[0], "");
|
|
|
+ }
|
|
|
+ return new FunctionParameter(parts[1], parts[0]);
|
|
|
+ }).ToList<IFunctionParameter>());
|
|
|
+ private static void RegisterFunctionTemplateDesc(string group, string name, string description, params string[] parameters)
|
|
|
+ => RegisterFunctionTemplate(group, name, description, parameters.Select(x =>
|
|
|
+ {
|
|
|
+ var parts = x.Split(' ');
|
|
|
+ if (parts.Length == 1)
|
|
|
+ {
|
|
|
+ return new FunctionParameter(parts[0], "");
|
|
|
+ }
|
|
|
+ return new FunctionParameter(parts[1], parts[0]);
|
|
|
+ }).ToList<IFunctionParameter>());
|
|
|
|
|
|
static ExpressionEditorWindow()
|
|
|
{
|
|
|
- RegisterFunctionTemplate("Math", "Abs", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Acos", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Asin", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Atan", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Ceiling", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Cos", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Count", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Exp", "exp");
|
|
|
- RegisterFunctionTemplate("Math", "Floor", "x");
|
|
|
- RegisterFunctionTemplate("Math", "IEEERemainder", "x", "y");
|
|
|
- RegisterFunctionTemplate("Math", "Log10", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Log", "x", "base");
|
|
|
- RegisterFunctionTemplate("Math", "Max", "x", "y");
|
|
|
- RegisterFunctionTemplate("Math", "Min", "x", "y");
|
|
|
- RegisterFunctionTemplate("Math", "Pow", "base", "exp");
|
|
|
+ RegisterFunctionTemplate("Math", "Abs", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Acos", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Asin", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Atan", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Ceiling", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Cos", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Count", "...");
|
|
|
+ RegisterFunctionTemplate("Math", "Exp", "double exp");
|
|
|
+ RegisterFunctionTemplate("Math", "Floor", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "IEEERemainder", "double x", "double y");
|
|
|
+ RegisterFunctionTemplate("Math", "Log10", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Log", "double x", "double base");
|
|
|
+ RegisterFunctionTemplate("Math", "Max", "double x", "double y");
|
|
|
+ RegisterFunctionTemplate("Math", "Min", "double x", "double y");
|
|
|
+ RegisterFunctionTemplateDesc("Math", "Pow", "Returns {base} ^ {exp}.", "double base", "double exp");
|
|
|
RegisterFunctionTemplate("Math", "Random");
|
|
|
- RegisterFunctionTemplate("Math", "Round", "x", "precision");
|
|
|
- RegisterFunctionTemplate("Math", "Sign", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Sin", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Sqrt", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Tan", "x");
|
|
|
- RegisterFunctionTemplate("Math", "Truncate", "x");
|
|
|
-
|
|
|
- RegisterFunctionTemplate("Logical", "If", "condition", "exp1", "exp2");
|
|
|
- RegisterFunctionTemplate("Logical", "In", "value", "...");
|
|
|
-
|
|
|
- RegisterFunctionTemplate("Statistical", "Average", "...");
|
|
|
- RegisterFunctionTemplate("Statistical", "Mean", "...");
|
|
|
- RegisterFunctionTemplate("Statistical", "Median", "...");
|
|
|
- RegisterFunctionTemplate("Statistical", "Mode", "...");
|
|
|
- RegisterFunctionTemplate("Statistical", "Sum", "...");
|
|
|
-
|
|
|
- RegisterFunctionTemplate("String", "Contains", "text", "value");
|
|
|
- RegisterFunctionTemplate("String", "EndsWith", "text", "value");
|
|
|
- RegisterFunctionTemplate("String", "Length", "value");
|
|
|
- RegisterFunctionTemplate("String", "PadLeft", "value", "length", "character");
|
|
|
- RegisterFunctionTemplate("String", "PadRight", "value", "length", "character");
|
|
|
- RegisterFunctionTemplate("String", "StartsWith", "text", "value");
|
|
|
- RegisterFunctionTemplate("String", "Substring", "text", "startIndex", "length");
|
|
|
-
|
|
|
- RegisterFunctionTemplate("Date", "AddYears", "date", "years");
|
|
|
- RegisterFunctionTemplate("Date", "AddMonths", "date", "months");
|
|
|
- RegisterFunctionTemplate("Date", "AddDays", "date", "days");
|
|
|
- RegisterFunctionTemplate("Date", "AddHours", "date", "hrs");
|
|
|
- RegisterFunctionTemplate("Date", "AddMinutes", "date", "mins");
|
|
|
- RegisterFunctionTemplate("Date", "AddSeconds", "date", "secs");
|
|
|
- RegisterFunctionTemplate("Date", "AddMilliseconds", "date", "ms");
|
|
|
- RegisterFunctionTemplate("Date", "YearOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "MonthOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "DayOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "HourOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "MinuteOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "SecondOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "MillisecondOf", "date");
|
|
|
- RegisterFunctionTemplate("Date", "DaysBetween", "date", "date");
|
|
|
- RegisterFunctionTemplate("Date", "HoursBetween", "date", "date");
|
|
|
- RegisterFunctionTemplate("Date", "MinutesBetween", "date", "date");
|
|
|
- RegisterFunctionTemplate("Date", "SecondsBetween", "date", "date");
|
|
|
- RegisterFunctionTemplate("Date", "MillisecondsBetween", "date", "date");
|
|
|
+ RegisterFunctionTemplateDesc("Math", "Round", "Rounds a number to a particular number of decimal places, given by {precision}.", "double x", "double precision");
|
|
|
+ RegisterFunctionTemplate("Math", "Sign", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Sin", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Sqrt", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Tan", "double x");
|
|
|
+ RegisterFunctionTemplate("Math", "Truncate", "double x");
|
|
|
+
|
|
|
+ RegisterFunctionTemplateDesc("Logical", "If", "If {condition} is true or non-zero, returns {exp1}; otherwise, returns {exp2}.", "bool condition", "exp1", "exp2");
|
|
|
+ RegisterFunctionTemplateDesc("Logical", "In", "Returns true if {value} is in the list of values.", "value", "...");
|
|
|
+
|
|
|
+ RegisterFunctionTemplateDesc("Statistical", "Average", "Takes the average of a list of numbers.", "double ...");
|
|
|
+ RegisterFunctionTemplateDesc("Statistical", "Mean", "Calculates the mean for a list of numbers.", "double ...");
|
|
|
+ RegisterFunctionTemplateDesc("Statistical", "Median", "Calculates the median for a list of numbers.", "double ...");
|
|
|
+ RegisterFunctionTemplateDesc("Statistical", "Mode", "Calculates the mode for a list of numbers.", "double ...");
|
|
|
+ RegisterFunctionTemplateDesc("Statistical", "Sum", "Calculates the sum of a list of numbers.", "double ...");
|
|
|
+
|
|
|
+ RegisterFunctionTemplate("String", "Contains", "string text", "str value");
|
|
|
+ RegisterFunctionTemplate("String", "EndsWith", "string text", "str value");
|
|
|
+ RegisterFunctionTemplate("String", "Length", "string value");
|
|
|
+ RegisterFunctionTemplate("String", "PadLeft", "string value", "int length", "char character");
|
|
|
+ RegisterFunctionTemplate("String", "PadRight", "string value", "int length", "char character");
|
|
|
+ RegisterFunctionTemplate("String", "StartsWith", "string text", "string value");
|
|
|
+ RegisterFunctionTemplate("String", "Substring", "string text", "int startIndex", "int length");
|
|
|
+
|
|
|
+ RegisterFunctionTemplate("Date", "AddYears", "date date", "int years");
|
|
|
+ RegisterFunctionTemplate("Date", "AddMonths", "date date", "int months");
|
|
|
+ RegisterFunctionTemplate("Date", "AddDays", "date date", "int days");
|
|
|
+ RegisterFunctionTemplate("Date", "AddHours", "date date", "int hrs");
|
|
|
+ RegisterFunctionTemplate("Date", "AddMinutes", "date date", "int mins");
|
|
|
+ RegisterFunctionTemplate("Date", "AddSeconds", "date date", "int secs");
|
|
|
+ RegisterFunctionTemplate("Date", "AddMilliseconds", "date date", "int ms");
|
|
|
+ RegisterFunctionTemplate("Date", "YearOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "MonthOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "DayOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "HourOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "MinuteOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "SecondOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "MillisecondOf", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "DaysBetween", "date date", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "HoursBetween", "date date", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "MinutesBetween", "date date", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "SecondsBetween", "date date", "date date");
|
|
|
+ RegisterFunctionTemplate("Date", "MillisecondsBetween", "date date", "date date");
|
|
|
|
|
|
RegisterFunctionTemplate("Conversion", "Date", "value");
|
|
|
- RegisterFunctionTemplate("Conversion", "Date", "value", "format");
|
|
|
+ RegisterFunctionTemplate("Conversion", "Date", "value", "string format");
|
|
|
RegisterFunctionTemplate("Conversion", "Decimal", "value");
|
|
|
RegisterFunctionTemplate("Conversion", "Double", "value");
|
|
|
RegisterFunctionTemplate("Conversion", "Integer", "value");
|
|
@@ -124,7 +143,11 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
foreach(var function in CoreExpression.Functions)
|
|
|
{
|
|
|
- RegisterFunctionTemplate(function.Group, function.Name, function.Parameters);
|
|
|
+ RegisterFunctionTemplate(
|
|
|
+ function.Group,
|
|
|
+ function.Name,
|
|
|
+ function.Description,
|
|
|
+ function.Parameters.Select(x => new FunctionParameter(x.Name, x.Type)).ToList<IFunctionParameter>());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -218,7 +241,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
var placeholder = DeletePlaceholder();
|
|
|
InsertText($"{template.Name}(");
|
|
|
- AppendText(string.Join(", ", template.Parameters.Select(x => $"{{{x}}}")) + ")");
|
|
|
+ AppendText(string.Join(", ", template.Parameters.Select(x => $"{{{x.Name}}}")) + ")");
|
|
|
if (placeholder)
|
|
|
JumpPlaceholder(true);
|
|
|
}
|