forked from ZeraGmbH/Blockly.Net
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExtensionMethods.cs
More file actions
126 lines (109 loc) · 4.25 KB
/
Copy pathExtensionMethods.cs
File metadata and controls
126 lines (109 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using BlocklyNet.Core.Blocks.Controls;
using BlocklyNet.Core.Blocks.Lists;
using BlocklyNet.Core.Blocks.Logic;
using BlocklyNet.Core.Blocks.Math;
using BlocklyNet.Core.Blocks.Procedures;
using BlocklyNet.Core.Blocks.Text;
using BlocklyNet.Core.Blocks.Variables;
using BlocklyNet.Core.Model;
namespace BlocklyNet.Core.Blocks;
/// <summary>
///
/// </summary>
public static class Extensions
{
/// <summary>
///
/// </summary>
/// <param name="mutations"></param>
/// <param name="name"></param>
/// <param name="domain"></param>
/// <returns></returns>
public static string GetValue(this IList<Mutation> mutations, string name, string domain = "mutation")
{
var mut = mutations.FirstOrDefault(x => x.Domain == domain && x.Name == name);
if (null == mut)
return null!;
return mut.Value;
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static Context GetRootContext(this Context context)
{
var parentContext = context?.Parent;
while (parentContext != null)
{
if (parentContext.Parent == null)
return parentContext;
parentContext = parentContext.Parent;
}
return context!;
}
/// <summary>
///
/// </summary>
/// <param name="parser"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T AddStandardBlocks<T>(this T parser) where T : Parser<T>
{
parser.AddBlock<ControlsRepeatExt>("controls_repeat_ext");
parser.AddBlock<ControlsIf>("controls_if");
parser.AddBlock<ControlsWhileUntil>("controls_whileUntil");
parser.AddBlock<ControlsFlowStatement>("controls_flow_statements");
parser.AddBlock<ControlsForEach>("controls_forEach");
parser.AddBlock<ControlsFor>("controls_for");
parser.AddBlock<LogicCompare>("logic_compare");
parser.AddBlock<LogicBoolean>("logic_boolean");
parser.AddBlock<LogicNegate>("logic_negate");
parser.AddBlock<LogicOperation>("logic_operation");
parser.AddBlock<LogicNull>("logic_null");
parser.AddBlock<LogicTernary>("logic_ternary");
parser.AddBlock<MathArithmetic>("math_arithmetic");
parser.AddBlock<MathNumber>("math_number");
parser.AddBlock<MathSingle>("math_single");
parser.AddBlock<MathSingle>("math_trig");
parser.AddBlock<MathRound>("math_round");
parser.AddBlock<MathConstant>("math_constant");
parser.AddBlock<MathNumberProperty>("math_number_property");
parser.AddBlock<MathOnList>("math_on_list");
parser.AddBlock<MathConstrain>("math_constrain");
parser.AddBlock<MathModulo>("math_modulo");
parser.AddBlock<MathRandomFloat>("math_random_float");
parser.AddBlock<MathRandomInt>("math_random_int");
parser.AddBlock<MathChange>("math_change");
parser.AddBlock<TextAppend>("text_append");
parser.AddBlock<TextBlock>("text");
parser.AddBlock<TextCaseChange>("text_changeCase");
parser.AddBlock<TextIndexOf>("text_indexOf");
parser.AddBlock<TextIsEmpty>("text_isEmpty");
parser.AddBlock<TextJoin>("text_join");
parser.AddBlock<TextLength>("text_length");
parser.AddBlock<TextSubstring>("text_getSubstring");
parser.AddBlock<TextTrim>("text_trim");
parser.AddBlock<TextReplace>("text_replace");
parser.AddBlock<VariablesGet>("variables_get");
parser.AddBlock<VariablesSet>("variables_set");
parser.AddBlock<ColourPicker>("colour_picker");
parser.AddBlock<ColourRandom>("colour_random");
parser.AddBlock<ColourRgb>("colour_rgb");
parser.AddBlock<ColourBlend>("colour_blend");
parser.AddBlock<ProceduresDef>("procedures_defnoreturn");
parser.AddBlock<ProceduresDef>("procedures_defreturn");
parser.AddBlock<ProceduresCallNoReturn>("procedures_callnoreturn");
parser.AddBlock<ProceduresCallReturn>("procedures_callreturn");
parser.AddBlock<ProceduresIfReturn>("procedures_ifreturn");
parser.AddBlock<ListsSplit>("lists_split");
parser.AddBlock<ListsCreateWith>("lists_create_with");
parser.AddBlock<ListsLength>("lists_length");
parser.AddBlock<ListsRepeat>("lists_repeat");
parser.AddBlock<ListsIsEmpty>("lists_isEmpty");
parser.AddBlock<ListsGetIndex>("lists_getIndex");
parser.AddBlock<ListsSetIndex>("lists_setIndex");
parser.AddBlock<ListsIndexOf>("lists_indexOf");
return parser;
}
}