Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HebrewNumber.cs
Go to the documentation of this file.
1
using
System.Text
;
2
3
namespace
System.Globalization
;
4
5
internal
static
class
HebrewNumber
6
{
7
private
enum
HebrewToken
:
short
8
{
9
Invalid
= -1,
10
Digit400
,
11
Digit200_300
,
12
Digit100
,
13
Digit10
,
14
Digit1
,
15
Digit6_7
,
16
Digit7
,
17
Digit9
,
18
SingleQuote
,
19
DoubleQuote
20
}
21
22
private
struct
HebrewValue
23
{
24
internal
HebrewToken
token
;
25
26
internal
short
value
;
27
28
internal
HebrewValue
(
HebrewToken
token
,
short
value
)
29
{
30
this.token =
token
;
31
this.value =
value
;
32
}
33
}
34
35
internal
enum
HS
: sbyte
36
{
37
_err
= -1,
38
Start
= 0,
39
S400
= 1,
40
S400_400
= 2,
41
S400_X00
= 3,
42
S400_X0
= 4,
43
X00_DQ
= 5,
44
S400_X00_X0
= 6,
45
X0_DQ
= 7,
46
X
= 8,
47
X0
= 9,
48
X00
= 10,
49
S400_DQ
= 11,
50
S400_400_DQ
= 12,
51
S400_400_100
= 13,
52
S9
= 14,
53
X00_S9
= 15,
54
S9_DQ
= 16,
55
END
= 100
56
}
57
58
private
static
readonly
HebrewValue
[]
s_hebrewValues
=
new
HebrewValue
[27]
59
{
60
new
HebrewValue
(
HebrewToken
.Digit1, 1),
61
new
HebrewValue
(
HebrewToken
.Digit1, 2),
62
new
HebrewValue
(
HebrewToken
.Digit1, 3),
63
new
HebrewValue
(
HebrewToken
.Digit1, 4),
64
new
HebrewValue
(
HebrewToken
.Digit1, 5),
65
new
HebrewValue
(
HebrewToken
.Digit6_7, 6),
66
new
HebrewValue
(
HebrewToken
.Digit6_7, 7),
67
new
HebrewValue
(
HebrewToken
.Digit1, 8),
68
new
HebrewValue
(
HebrewToken
.Digit9, 9),
69
new
HebrewValue
(
HebrewToken
.Digit10, 10),
70
new
HebrewValue
(
HebrewToken
.Invalid, -1),
71
new
HebrewValue
(
HebrewToken
.Digit10, 20),
72
new
HebrewValue
(
HebrewToken
.Digit10, 30),
73
new
HebrewValue
(
HebrewToken
.Invalid, -1),
74
new
HebrewValue
(
HebrewToken
.Digit10, 40),
75
new
HebrewValue
(
HebrewToken
.Invalid, -1),
76
new
HebrewValue
(
HebrewToken
.Digit10, 50),
77
new
HebrewValue
(
HebrewToken
.Digit10, 60),
78
new
HebrewValue
(
HebrewToken
.Digit10, 70),
79
new
HebrewValue
(
HebrewToken
.Invalid, -1),
80
new
HebrewValue
(
HebrewToken
.Digit10, 80),
81
new
HebrewValue
(
HebrewToken
.Invalid, -1),
82
new
HebrewValue
(
HebrewToken
.Digit10, 90),
83
new
HebrewValue
(
HebrewToken
.Digit100, 100),
84
new
HebrewValue
(
HebrewToken
.Digit200_300, 200),
85
new
HebrewValue
(
HebrewToken
.Digit200_300, 300),
86
new
HebrewValue
(
HebrewToken
.Digit400, 400)
87
};
88
89
private
static
readonly
char
s_maxHebrewNumberCh
= (char)(1488 +
s_hebrewValues
.Length - 1);
90
91
private
static
readonly
HS
[]
s_numberPasingState
=
new
HS
[170]
92
{
93
HS
.S400,
94
HS
.X00,
95
HS
.X00,
96
HS
.X0,
97
HS
.X,
98
HS
.X,
99
HS
.X,
100
HS
.S9,
101
HS
._err,
102
HS
._err,
103
HS
.S400_400,
104
HS
.S400_X00,
105
HS
.S400_X00,
106
HS
.S400_X0,
107
HS
._err,
108
HS
._err,
109
HS
._err,
110
HS
.X00_S9,
111
HS
.END,
112
HS
.S400_DQ,
113
HS
._err,
114
HS
._err,
115
HS
.S400_400_100,
116
HS
.S400_X0,
117
HS
._err,
118
HS
._err,
119
HS
._err,
120
HS
.X00_S9,
121
HS
._err,
122
HS
.S400_400_DQ,
123
HS
._err,
124
HS
._err,
125
HS
._err,
126
HS
.S400_X00_X0,
127
HS
._err,
128
HS
._err,
129
HS
._err,
130
HS
.X00_S9,
131
HS
._err,
132
HS
.X00_DQ,
133
HS
._err,
134
HS
._err,
135
HS
._err,
136
HS
._err,
137
HS
._err,
138
HS
._err,
139
HS
._err,
140
HS
._err,
141
HS
._err,
142
HS
.X0_DQ,
143
HS
._err,
144
HS
._err,
145
HS
._err,
146
HS
.END,
147
HS
.END,
148
HS
.END,
149
HS
.END,
150
HS
.END,
151
HS
._err,
152
HS
._err,
153
HS
._err,
154
HS
._err,
155
HS
._err,
156
HS
._err,
157
HS
._err,
158
HS
._err,
159
HS
._err,
160
HS
._err,
161
HS
._err,
162
HS
.X0_DQ,
163
HS
._err,
164
HS
._err,
165
HS
._err,
166
HS
._err,
167
HS
.END,
168
HS
.END,
169
HS
.END,
170
HS
.END,
171
HS
._err,
172
HS
._err,
173
HS
._err,
174
HS
._err,
175
HS
._err,
176
HS
._err,
177
HS
._err,
178
HS
._err,
179
HS
._err,
180
HS
._err,
181
HS
.END,
182
HS
._err,
183
HS
._err,
184
HS
._err,
185
HS
._err,
186
HS
._err,
187
HS
._err,
188
HS
._err,
189
HS
._err,
190
HS
._err,
191
HS
.END,
192
HS
.X0_DQ,
193
HS
._err,
194
HS
._err,
195
HS
._err,
196
HS
.S400_X0,
197
HS
._err,
198
HS
._err,
199
HS
._err,
200
HS
.X00_S9,
201
HS
.END,
202
HS
.X00_DQ,
203
HS
.END,
204
HS
.END,
205
HS
.END,
206
HS
.END,
207
HS
.END,
208
HS
.END,
209
HS
.END,
210
HS
.END,
211
HS
._err,
212
HS
._err,
213
HS
._err,
214
HS
._err,
215
HS
.END,
216
HS
.END,
217
HS
.END,
218
HS
.END,
219
HS
.END,
220
HS
.END,
221
HS
._err,
222
HS
._err,
223
HS
._err,
224
HS
._err,
225
HS
._err,
226
HS
.S400_X00_X0,
227
HS
._err,
228
HS
._err,
229
HS
._err,
230
HS
.X00_S9,
231
HS
._err,
232
HS
.X00_DQ,
233
HS
._err,
234
HS
._err,
235
HS
._err,
236
HS
._err,
237
HS
._err,
238
HS
._err,
239
HS
._err,
240
HS
._err,
241
HS
.END,
242
HS
.S9_DQ,
243
HS
._err,
244
HS
._err,
245
HS
._err,
246
HS
._err,
247
HS
._err,
248
HS
._err,
249
HS
._err,
250
HS
._err,
251
HS
._err,
252
HS
.S9_DQ,
253
HS
._err,
254
HS
._err,
255
HS
._err,
256
HS
._err,
257
HS
._err,
258
HS
.END,
259
HS
.END,
260
HS
._err,
261
HS
._err,
262
HS._err
263
};
264
265
internal
static
void
Append
(
StringBuilder
outputBuffer,
int
Number
)
266
{
267
int
length
= outputBuffer.
Length
;
268
char
c =
'\0'
;
269
if
(
Number
> 5000)
270
{
271
Number
-= 5000;
272
}
273
int
num =
Number
/ 100;
274
if
(num > 0)
275
{
276
Number
-= num * 100;
277
for
(
int
i = 0; i < num / 4; i++)
278
{
279
outputBuffer.
Append
(
'ת'
);
280
}
281
int
num2 = num % 4;
282
if
(num2 > 0)
283
{
284
outputBuffer.
Append
((
char
)(1510 + num2));
285
}
286
}
287
int
num3 =
Number
/ 10;
288
Number
%= 10;
289
switch
(num3)
290
{
291
case
0:
292
c =
'\0'
;
293
break
;
294
case
1:
295
c =
'י'
;
296
break
;
297
case
2:
298
c =
'כ'
;
299
break
;
300
case
3:
301
c =
'ל'
;
302
break
;
303
case
4:
304
c =
'מ'
;
305
break
;
306
case
5:
307
c =
'נ'
;
308
break
;
309
case
6:
310
c =
'ס'
;
311
break
;
312
case
7:
313
c =
'ע'
;
314
break
;
315
case
8:
316
c =
'פ'
;
317
break
;
318
case
9:
319
c =
'צ'
;
320
break
;
321
}
322
char
c2 = (char)((
Number
> 0) ? ((uint)(1488 +
Number
- 1)) : 0u);
323
if
(c2 ==
'ה'
&& c ==
'י'
)
324
{
325
c2 =
'ו'
;
326
c =
'ט'
;
327
}
328
if
(c2 ==
'ו'
&& c ==
'י'
)
329
{
330
c2 =
'ז'
;
331
c =
'ט'
;
332
}
333
if
(c != 0)
334
{
335
outputBuffer.
Append
(c);
336
}
337
if
(c2 != 0)
338
{
339
outputBuffer.
Append
(c2);
340
}
341
if
(outputBuffer.
Length
-
length
> 1)
342
{
343
outputBuffer.
Insert
(outputBuffer.
Length
- 1,
'"'
);
344
}
345
else
346
{
347
outputBuffer.
Append
(
'\''
);
348
}
349
}
350
351
internal
static
HebrewNumberParsingState
ParseByChar
(
char
ch
, ref
HebrewNumberParsingContext
context)
352
{
353
HebrewToken
hebrewToken;
354
switch
(
ch
)
355
{
356
case
'\''
:
357
hebrewToken =
HebrewToken
.SingleQuote;
358
break
;
359
case
'"'
:
360
hebrewToken =
HebrewToken
.DoubleQuote;
361
break
;
362
default
:
363
{
364
int
num =
ch
- 1488;
365
if
(num >= 0 && num <
s_hebrewValues
.Length)
366
{
367
hebrewToken =
s_hebrewValues
[num].token;
368
if
(hebrewToken ==
HebrewToken
.Invalid)
369
{
370
return
HebrewNumberParsingState
.NotHebrewDigit;
371
}
372
context.result +=
s_hebrewValues
[num].value;
373
break
;
374
}
375
return
HebrewNumberParsingState
.NotHebrewDigit;
376
}
377
}
378
context.state =
s_numberPasingState
[(int)context.state * 10 + (
int
)hebrewToken];
379
if
(context.state ==
HS
._err)
380
{
381
return
HebrewNumberParsingState
.InvalidHebrewNumber;
382
}
383
if
(context.state ==
HS
.END)
384
{
385
return
HebrewNumberParsingState
.FoundEndOfHebrewNumber;
386
}
387
return
HebrewNumberParsingState
.ContinueParsing;
388
}
389
390
internal
static
bool
IsDigit
(
char
ch
)
391
{
392
if
(
ch
>=
'א'
&&
ch
<=
s_maxHebrewNumberCh
)
393
{
394
return
s_hebrewValues
[
ch
- 1488].value >= 0;
395
}
396
if
(
ch
!=
'\''
)
397
{
398
return
ch
==
'"'
;
399
}
400
return
true
;
401
}
402
}
System.Globalization.HebrewNumber.s_hebrewValues
static readonly HebrewValue[] s_hebrewValues
Definition
HebrewNumber.cs:58
System.Globalization.HebrewNumber.s_maxHebrewNumberCh
static readonly char s_maxHebrewNumberCh
Definition
HebrewNumber.cs:89
System.Globalization.HebrewNumber.ParseByChar
static HebrewNumberParsingState ParseByChar(char ch, ref HebrewNumberParsingContext context)
Definition
HebrewNumber.cs:351
System.Globalization.HebrewNumber.Append
static void Append(StringBuilder outputBuffer, int Number)
Definition
HebrewNumber.cs:265
System.Globalization.HebrewNumber.HebrewToken
HebrewToken
Definition
HebrewNumber.cs:8
System.Globalization.HebrewNumber.HebrewToken.Digit400
@ Digit400
System.Globalization.HebrewNumber.HebrewToken.DoubleQuote
@ DoubleQuote
System.Globalization.HebrewNumber.HebrewToken.Invalid
@ Invalid
System.Globalization.HebrewNumber.HebrewToken.Digit7
@ Digit7
System.Globalization.HebrewNumber.HebrewToken.Digit6_7
@ Digit6_7
System.Globalization.HebrewNumber.HebrewToken.Digit9
@ Digit9
System.Globalization.HebrewNumber.HebrewToken.SingleQuote
@ SingleQuote
System.Globalization.HebrewNumber.HebrewToken.Digit1
@ Digit1
System.Globalization.HebrewNumber.HebrewToken.Digit200_300
@ Digit200_300
System.Globalization.HebrewNumber.HebrewToken.Digit100
@ Digit100
System.Globalization.HebrewNumber.HebrewToken.Digit10
@ Digit10
System.Globalization.HebrewNumber.HS
HS
Definition
HebrewNumber.cs:36
System.Globalization.HebrewNumber.HS.X
@ X
System.Globalization.HebrewNumber.HS.X00_S9
@ X00_S9
System.Globalization.HebrewNumber.HS.S400_400_DQ
@ S400_400_DQ
System.Globalization.HebrewNumber.HS.S400_400
@ S400_400
System.Globalization.HebrewNumber.HS._err
@ _err
System.Globalization.HebrewNumber.HS.X00_DQ
@ X00_DQ
System.Globalization.HebrewNumber.HS.X00
@ X00
System.Globalization.HebrewNumber.HS.S400_X0
@ S400_X0
System.Globalization.HebrewNumber.HS.S400_DQ
@ S400_DQ
System.Globalization.HebrewNumber.HS.S400_X00
@ S400_X00
System.Globalization.HebrewNumber.HS.S400
@ S400
System.Globalization.HebrewNumber.HS.S9_DQ
@ S9_DQ
System.Globalization.HebrewNumber.HS.Start
@ Start
System.Globalization.HebrewNumber.HS.END
@ END
System.Globalization.HebrewNumber.HS.X0
@ X0
System.Globalization.HebrewNumber.HS.X0_DQ
@ X0_DQ
System.Globalization.HebrewNumber.HS.S400_X00_X0
@ S400_X00_X0
System.Globalization.HebrewNumber.HS.S9
@ S9
System.Globalization.HebrewNumber.HS.S400_400_100
@ S400_400_100
System.Globalization.HebrewNumber.IsDigit
static bool IsDigit(char ch)
Definition
HebrewNumber.cs:390
System.Globalization.HebrewNumber.s_numberPasingState
static readonly HS[] s_numberPasingState
Definition
HebrewNumber.cs:91
System.Globalization.HebrewNumber
Definition
HebrewNumber.cs:6
System.Number
Definition
Number.cs:13
System.Text.StringBuilder.Length
int Length
Definition
StringBuilder.cs:360
System.Text.StringBuilder.Insert
unsafe StringBuilder Insert(int index, string? value, int count)
Definition
StringBuilder.cs:1017
System.Text.StringBuilder.Append
StringBuilder Append(char value, int repeatCount)
Definition
StringBuilder.cs:744
System.Text.StringBuilder
Definition
StringBuilder.cs:14
System.Globalization.HebrewNumberParsingState
HebrewNumberParsingState
Definition
HebrewNumberParsingState.cs:4
System.Globalization
Definition
Calendar.cs:1
System.Text
Definition
ConsoleEncoding.cs:1
System.ExceptionArgument.length
@ length
System.ExceptionArgument.ch
@ ch
System.Globalization.HebrewNumberParsingContext
Definition
HebrewNumberParsingContext.cs:4
System.Globalization.HebrewNumber.HebrewValue.value
short value
Definition
HebrewNumber.cs:26
System.Globalization.HebrewNumber.HebrewValue.token
HebrewToken token
Definition
HebrewNumber.cs:24
System.Globalization.HebrewNumber.HebrewValue.HebrewValue
HebrewValue(HebrewToken token, short value)
Definition
HebrewNumber.cs:28
System.Globalization.HebrewNumber.HebrewValue
Definition
HebrewNumber.cs:23
source
System.Private.CoreLib
System.Globalization
HebrewNumber.cs
Generated by
1.10.0