@@ -10,29 +10,25 @@ namespace UnityExplorer
10
10
{
11
11
public static class ParseUtility
12
12
{
13
- public static CultureInfo en_US = new CultureInfo ( "en-US" ) ;
14
-
15
13
private static readonly HashSet < Type > nonPrimitiveTypes = new HashSet < Type >
16
14
{
17
15
typeof ( string ) ,
18
16
typeof ( decimal ) ,
19
17
typeof ( DateTime ) ,
20
18
} ;
21
19
22
- public const string NUMBER_FORMAT = "0.####" ;
20
+ // Helper for formatting float/double/decimal numbers to maximum of 4 decimal points.
21
+ // And also for formatting a sequence of those numbers, ie a Vector3, Color etc
23
22
23
+ public static readonly string NumberFormatString = $ "0{ CultureInfo . CurrentCulture . NumberFormat . NumberDecimalSeparator } ####";
24
24
private static readonly Dictionary < int , string > numSequenceStrings = new Dictionary < int , string > ( ) ;
25
25
26
- // Helper for formatting float/double/decimal numbers to maximum of 4 decimal points.
27
26
public static string FormatDecimalSequence ( params object [ ] numbers )
28
27
{
29
28
if ( numbers . Length <= 0 )
30
29
return null ;
31
30
32
- int count = numbers . Length ;
33
- var formatString = GetSequenceFormatString ( count ) ;
34
-
35
- return string . Format ( en_US , formatString , numbers ) ;
31
+ return string . Format ( CultureInfo . CurrentCulture , GetSequenceFormatString ( numbers . Length ) , numbers ) ;
36
32
}
37
33
38
34
public static string GetSequenceFormatString ( int count )
@@ -46,19 +42,19 @@ public static string GetSequenceFormatString(int count)
46
42
string [ ] strings = new string [ count ] ;
47
43
48
44
for ( int i = 0 ; i < count ; i ++ )
49
- strings [ i ] = $ "{{{i}:{ NUMBER_FORMAT } }}";
50
-
51
- string s = string . Join ( ", " , strings ) ;
45
+ strings [ i ] = $ "{{{i}:{ NumberFormatString } }}";
52
46
53
- numSequenceStrings . Add ( count , s ) ;
54
- return s ;
47
+ string ret = string . Join ( " " , strings ) ;
48
+ numSequenceStrings . Add ( count , ret ) ;
49
+ return ret ;
55
50
}
56
51
52
+ // Main parsing API
53
+
57
54
public static bool CanParse ( Type type )
58
55
{
59
- if ( string . IsNullOrEmpty ( type . FullName ) )
60
- return false ;
61
- return type . IsPrimitive || type . IsEnum || nonPrimitiveTypes . Contains ( type ) || customTypes . ContainsKey ( type . FullName ) ;
56
+ return ! string . IsNullOrEmpty ( type ? . FullName )
57
+ && ( type . IsPrimitive || type . IsEnum || nonPrimitiveTypes . Contains ( type ) || customTypes . ContainsKey ( type . FullName ) ) ;
62
58
}
63
59
64
60
public static bool TryParse ( string input , Type type , out object obj , out Exception parseException )
@@ -143,7 +139,7 @@ public static string ToStringForInput(object obj, Type type)
143
139
else if ( formattedTypes . Contains ( type ) )
144
140
{
145
141
return ReflectionUtility . GetMethodInfo ( type , "ToString" , new Type [ ] { typeof ( string ) , typeof ( IFormatProvider ) } )
146
- . Invoke ( obj , new object [ ] { NUMBER_FORMAT , en_US } )
142
+ . Invoke ( obj , new object [ ] { NumberFormatString , CultureInfo . CurrentCulture } )
147
143
as string ;
148
144
}
149
145
else
@@ -166,9 +162,7 @@ public static string GetExampleInput(Type type)
166
162
try
167
163
{
168
164
if ( type . IsEnum )
169
- {
170
165
typeInputExamples . Add ( type . AssemblyQualifiedName , Enum . GetNames ( type ) . First ( ) ) ;
171
- }
172
166
else
173
167
{
174
168
var instance = Activator . CreateInstance ( type ) ;
@@ -222,10 +216,10 @@ public static object TryParseVector2(string input)
222
216
{
223
217
Vector2 vector = default ;
224
218
225
- var split = input . Split ( ', ' ) ;
219
+ var split = input . Split ( ' ' ) ;
226
220
227
- vector . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
228
- vector . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
221
+ vector . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
222
+ vector . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
229
223
230
224
return vector ;
231
225
}
@@ -244,11 +238,11 @@ public static object TryParseVector3(string input)
244
238
{
245
239
Vector3 vector = default ;
246
240
247
- var split = input . Split ( ', ' ) ;
241
+ var split = input . Split ( ' ' ) ;
248
242
249
- vector . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
250
- vector . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
251
- vector . z = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
243
+ vector . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
244
+ vector . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
245
+ vector . z = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
252
246
253
247
return vector ;
254
248
}
@@ -267,12 +261,12 @@ public static object TryParseVector4(string input)
267
261
{
268
262
Vector4 vector = default ;
269
263
270
- var split = input . Split ( ', ' ) ;
264
+ var split = input . Split ( ' ' ) ;
271
265
272
- vector . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
273
- vector . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
274
- vector . z = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
275
- vector . w = float . Parse ( split [ 3 ] . Trim ( ) , en_US ) ;
266
+ vector . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
267
+ vector . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
268
+ vector . z = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
269
+ vector . w = float . Parse ( split [ 3 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
276
270
277
271
return vector ;
278
272
}
@@ -291,22 +285,22 @@ public static object TryParseQuaternion(string input)
291
285
{
292
286
Vector3 vector = default ;
293
287
294
- var split = input . Split ( ', ' ) ;
288
+ var split = input . Split ( ' ' ) ;
295
289
296
290
if ( split . Length == 4 )
297
291
{
298
292
Quaternion quat = default ;
299
- quat . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
300
- quat . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
301
- quat . z = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
302
- quat . w = float . Parse ( split [ 3 ] . Trim ( ) , en_US ) ;
293
+ quat . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
294
+ quat . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
295
+ quat . z = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
296
+ quat . w = float . Parse ( split [ 3 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
303
297
return quat ;
304
298
}
305
299
else
306
300
{
307
- vector . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
308
- vector . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
309
- vector . z = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
301
+ vector . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
302
+ vector . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
303
+ vector . z = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
310
304
return Quaternion . Euler ( vector ) ;
311
305
}
312
306
}
@@ -327,12 +321,12 @@ public static object TryParseRect(string input)
327
321
{
328
322
Rect rect = default ;
329
323
330
- var split = input . Split ( ', ' ) ;
324
+ var split = input . Split ( ' ' ) ;
331
325
332
- rect . x = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
333
- rect . y = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
334
- rect . width = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
335
- rect . height = float . Parse ( split [ 3 ] . Trim ( ) , en_US ) ;
326
+ rect . x = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
327
+ rect . y = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
328
+ rect . width = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
329
+ rect . height = float . Parse ( split [ 3 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
336
330
337
331
return rect ;
338
332
}
@@ -351,13 +345,13 @@ public static object TryParseColor(string input)
351
345
{
352
346
Color color = default ;
353
347
354
- var split = input . Split ( ', ' ) ;
348
+ var split = input . Split ( ' ' ) ;
355
349
356
- color . r = float . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
357
- color . g = float . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
358
- color . b = float . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
350
+ color . r = float . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
351
+ color . g = float . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
352
+ color . b = float . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
359
353
if ( split . Length > 3 )
360
- color . a = float . Parse ( split [ 3 ] . Trim ( ) , en_US ) ;
354
+ color . a = float . Parse ( split [ 3 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
361
355
else
362
356
color . a = 1 ;
363
357
@@ -378,13 +372,13 @@ public static object TryParseColor32(string input)
378
372
{
379
373
Color32 color = default ;
380
374
381
- var split = input . Split ( ', ' ) ;
375
+ var split = input . Split ( ' ' ) ;
382
376
383
- color . r = byte . Parse ( split [ 0 ] . Trim ( ) , en_US ) ;
384
- color . g = byte . Parse ( split [ 1 ] . Trim ( ) , en_US ) ;
385
- color . b = byte . Parse ( split [ 2 ] . Trim ( ) , en_US ) ;
377
+ color . r = byte . Parse ( split [ 0 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
378
+ color . g = byte . Parse ( split [ 1 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
379
+ color . b = byte . Parse ( split [ 2 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
386
380
if ( split . Length > 3 )
387
- color . a = byte . Parse ( split [ 3 ] . Trim ( ) , en_US ) ;
381
+ color . a = byte . Parse ( split [ 3 ] . Trim ( ) , CultureInfo . CurrentCulture ) ;
388
382
else
389
383
color . a = 255 ;
390
384
@@ -397,7 +391,7 @@ public static string Color32ToString(object obj)
397
391
return null ;
398
392
399
393
// ints, this is fine
400
- return $ "{ color . r } , { color . g } , { color . b } , { color . a } ";
394
+ return $ "{ color . r } { color . g } { color . b } { color . a } ";
401
395
}
402
396
403
397
// Layermask (Int32)
0 commit comments