forked from qrakhen/sqript-lib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParser.cs
More file actions
128 lines (113 loc) · 4.71 KB
/
Parser.cs
File metadata and controls
128 lines (113 loc) · 4.71 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
127
128
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Qrakhen.Sqript;
namespace Qrakhen.SqriptLib {
public class ParserInterface : Interface {
public ParserInterface() : base("parser") { }
public override void Load() {
Define(new Call(toNumber, new string[] { "value" }, Sqript.ValueType.Number));
Define(new Call(toInt, new string[] { "value" }, Sqript.ValueType.Number));
Define(new Call(toDecimal, new string[] { "value" }, Sqript.ValueType.Number));
Define(new Call(toBool, new string[] { "value" }, Sqript.ValueType.Number));
}
public QValue toNumber(Dictionary<string, QValue> parameters) {
if(!parameters.ContainsKey("value")) {
throw new ArgumentException("The needed parameter 'min' is missing!");
}
decimal number = toDecimal(parameters, "value");
return new QValue(
number,
Sqript.ValueType.Number
);
}
public QValue toInt(Dictionary<string, QValue> parameters) {
if(!parameters.ContainsKey("value")) {
throw new ArgumentException("The needed parameter 'min' is missing!");
}
int number = toInt(parameters, "value");
return new QValue(
number,
Sqript.ValueType.Integer
);
}
public QValue toDecimal(Dictionary<string, QValue> parameters) {
if(!parameters.ContainsKey("value")) {
throw new ArgumentException("The needed parameter 'min' is missing!");
}
double number = toDouble(parameters, "value");
return new QValue(
number,
Sqript.ValueType.Decimal
);
}
public QValue toBool(Dictionary<string, QValue> parameters) {
if(!parameters.ContainsKey("value")) {
throw new ArgumentException("The needed parameter 'min' is missing!");
}
bool number = toBool(parameters, "value");
return new QValue(
number,
Sqript.ValueType.Boolean
);
}
#region Helper
private decimal toDecimal(Dictionary<string, QValue> parameters, string name) {
if(parameters[name].Type != Sqript.ValueType.Integer
&& parameters[name].Type != Sqript.ValueType.Decimal
&& parameters[name].Type != Sqript.ValueType.Number
&& parameters[name].Type != Sqript.ValueType.Any
&& parameters[name].Type != Sqript.ValueType.String) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Decimal' but it is: " + parameters[name].Type);
}
try {
return decimal.Parse(parameters[name].Value.ToString());
} catch(FormatException) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Decimal' but it is: " + parameters[name].Type);
}
}
private int toInt(Dictionary<string, QValue> parameters, string name) {
if(parameters[name].Type != Sqript.ValueType.Integer
&& parameters[name].Type != Sqript.ValueType.Decimal
&& parameters[name].Type != Sqript.ValueType.Number
&& parameters[name].Type != Sqript.ValueType.Any
&& parameters[name].Type != Sqript.ValueType.String) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Integer' but it is: " + parameters[name].Type);
}
try {
return int.Parse(parameters[name].Value.ToString());
} catch(FormatException) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Integer' but it is: " + parameters[name].Type);
}
}
private double toDouble(Dictionary<string, QValue> parameters, string name) {
if(parameters[name].Type != Sqript.ValueType.Integer
&& parameters[name].Type != Sqript.ValueType.Decimal
&& parameters[name].Type != Sqript.ValueType.Number
&& parameters[name].Type != Sqript.ValueType.Any
&& parameters[name].Type != Sqript.ValueType.String) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Double' but it is: " + parameters[name].Type);
}
try {
return double.Parse(parameters[name].Value.ToString());
} catch(FormatException) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Double' but it is: " + parameters[name].Type);
}
}
private bool toBool(Dictionary<string, QValue> parameters, string name) {
if(parameters[name].Type != Sqript.ValueType.Integer
&& parameters[name].Type != Sqript.ValueType.Decimal
&& parameters[name].Type != Sqript.ValueType.Number
&& parameters[name].Type != Sqript.ValueType.Any
&& parameters[name].Type != Sqript.ValueType.String) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Boolean' but it is: " + parameters[name].Type);
}
try {
return bool.Parse(parameters[name].Value.ToString());
} catch(FormatException) {
throw new ArgumentException("The parameter '" + name + "' should have they type 'Boolean' but it is: " + parameters[name].Type);
}
}
#endregion
}
}