︙ | | | ︙ | |
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
|
#endif
static OFLocale *currentLocale = nil;
static OFDictionary *operatorPrecedences = nil;
#ifndef OF_AMIGAOS
static void
parseLocale(char *locale, of_string_encoding_t *encoding,
OFString **language, OFString **territory)
{
if ((locale = of_strdup(locale)) == NULL)
return;
@try {
const of_string_encoding_t enc = OF_STRING_ENCODING_ASCII;
char *tmp;
/* We don't care for extras behind the @ */
if ((tmp = strrchr(locale, '@')) != NULL)
*tmp = '\0';
/* Encoding */
if ((tmp = strrchr(locale, '.')) != NULL) {
*tmp++ = '\0';
@try {
if (encoding != NULL)
*encoding = of_string_parse_encoding(
[OFString stringWithCString: tmp
encoding: enc]);
} @catch (OFInvalidArgumentException *e) {
}
}
/* Territory */
|
|
|
|
|
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
|
#endif
static OFLocale *currentLocale = nil;
static OFDictionary *operatorPrecedences = nil;
#ifndef OF_AMIGAOS
static void
parseLocale(char *locale, OFStringEncoding *encoding,
OFString **language, OFString **territory)
{
if ((locale = of_strdup(locale)) == NULL)
return;
@try {
OFStringEncoding enc = OFStringEncodingASCII;
char *tmp;
/* We don't care for extras behind the @ */
if ((tmp = strrchr(locale, '@')) != NULL)
*tmp = '\0';
/* Encoding */
if ((tmp = strrchr(locale, '.')) != NULL) {
*tmp++ = '\0';
@try {
if (encoding != NULL)
*encoding = OFParseStringEncodingName(
[OFString stringWithCString: tmp
encoding: enc]);
} @catch (OFInvalidArgumentException *e) {
}
}
/* Territory */
|
︙ | | | ︙ | |
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* Substitute variables and convert to RPN first */
tokens = [OFMutableArray array];
operators = [OFMutableArray array];
for (OFString *token in [condition
componentsSeparatedByString: @" "
options: OF_STRING_SKIP_EMPTY]) {
unsigned precedence;
of_unichar_t c;
if ([token isEqual: @"("]) {
[operators addObject: @"("];
continue;
}
if ([token isEqual: @")"]) {
|
|
|
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* Substitute variables and convert to RPN first */
tokens = [OFMutableArray array];
operators = [OFMutableArray array];
for (OFString *token in [condition
componentsSeparatedByString: @" "
options: OF_STRING_SKIP_EMPTY]) {
unsigned precedence;
OFUnichar c;
if ([token isEqual: @"("]) {
[operators addObject: @"("];
continue;
}
if ([token isEqual: @")"]) {
|
︙ | | | ︙ | |
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
var = [OFNumber numberWithBool:
[first isEqual: second]];
else if ([token isEqual: @"!="])
var = [OFNumber numberWithBool:
![first isEqual: second]];
else if ([token isEqual: @"<"])
var = [OFNumber numberWithBool: [first
compare: second] == OF_ORDERED_ASCENDING];
else if ([token isEqual: @"<="])
var = [OFNumber numberWithBool: [first
compare: second] != OF_ORDERED_DESCENDING];
else if ([token isEqual: @">"])
var = [OFNumber numberWithBool: [first
compare: second] == OF_ORDERED_DESCENDING];
else if ([token isEqual: @">="])
var = [OFNumber numberWithBool: [first
compare: second] != OF_ORDERED_ASCENDING];
else if ([token isEqual: @"+"])
var = [OFNumber numberWithDouble:
[first doubleValue] + [second doubleValue]];
else if ([token isEqual: @"%"])
var = [OFNumber numberWithLongLong:
[first longLongValue] %
[second longLongValue]];
|
|
|
|
|
|
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
var = [OFNumber numberWithBool:
[first isEqual: second]];
else if ([token isEqual: @"!="])
var = [OFNumber numberWithBool:
![first isEqual: second]];
else if ([token isEqual: @"<"])
var = [OFNumber numberWithBool: [first
compare: second] == OFOrderedAscending];
else if ([token isEqual: @"<="])
var = [OFNumber numberWithBool: [first
compare: second] != OFOrderedDescending];
else if ([token isEqual: @">"])
var = [OFNumber numberWithBool: [first
compare: second] == OFOrderedDescending];
else if ([token isEqual: @">="])
var = [OFNumber numberWithBool: [first
compare: second] != OFOrderedAscending];
else if ([token isEqual: @"+"])
var = [OFNumber numberWithDouble:
[first doubleValue] + [second doubleValue]];
else if ([token isEqual: @"%"])
var = [OFNumber numberWithLongLong:
[first longLongValue] %
[second longLongValue]];
|
︙ | | | ︙ | |
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
}
+ (OFString *)territory
{
return currentLocale.territory;
}
+ (of_string_encoding_t)encoding
{
return currentLocale.encoding;
}
+ (OFString *)decimalPoint
{
return currentLocale.decimalPoint;
|
|
|
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
}
+ (OFString *)territory
{
return currentLocale.territory;
}
+ (OFStringEncoding)encoding
{
return currentLocale.encoding;
}
+ (OFString *)decimalPoint
{
return currentLocale.decimalPoint;
|
︙ | | | ︙ | |
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
|
#ifndef OF_AMIGAOS
char *locale, *messagesLocale = NULL;
if (currentLocale != nil)
@throw [OFInitializationFailedException
exceptionWithClass: self.class];
_encoding = OF_STRING_ENCODING_UTF_8;
_decimalPoint = @".";
_localizedStrings = [[OFMutableArray alloc] init];
if ((locale = setlocale(LC_ALL, "")) != NULL)
_decimalPoint = [[OFString alloc]
initWithCString: localeconv()->decimal_point
encoding: _encoding];
|
|
|
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
|
#ifndef OF_AMIGAOS
char *locale, *messagesLocale = NULL;
if (currentLocale != nil)
@throw [OFInitializationFailedException
exceptionWithClass: self.class];
_encoding = OFStringEncodingUTF8;
_decimalPoint = @".";
_localizedStrings = [[OFMutableArray alloc] init];
if ((locale = setlocale(LC_ALL, "")) != NULL)
_decimalPoint = [[OFString alloc]
initWithCString: localeconv()->decimal_point
encoding: _encoding];
|
︙ | | | ︙ | |
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
|
# if defined(OF_MORPHOS)
if (GetVar("CODEPAGE", buffer, sizeof(buffer), 0) > 0) {
# elif defined(OF_AMIGAOS4)
if (GetVar("Charset", buffer, sizeof(buffer), 0) > 0) {
# else
if (0) {
# endif
of_string_encoding_t ASCII = OF_STRING_ENCODING_ASCII;
@try {
_encoding = of_string_parse_encoding(
[OFString stringWithCString: buffer
encoding: ASCII]);
} @catch (OFInvalidArgumentException *e) {
_encoding = OF_STRING_ENCODING_ISO_8859_1;
}
} else
_encoding = OF_STRING_ENCODING_ISO_8859_1;
/*
* Get it via localeconv() instead of from the Locale struct,
* to make sure we and printf etc. have the same expectations.
*/
_decimalPoint = [[OFString alloc]
initWithCString: localeconv()->decimal_point
|
|
|
|
|
|
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
|
# if defined(OF_MORPHOS)
if (GetVar("CODEPAGE", buffer, sizeof(buffer), 0) > 0) {
# elif defined(OF_AMIGAOS4)
if (GetVar("Charset", buffer, sizeof(buffer), 0) > 0) {
# else
if (0) {
# endif
OFStringEncoding ASCII = OFStringEncodingASCII;
@try {
_encoding = OFStringEncodingForName(
[OFString stringWithCString: buffer
encoding: ASCII]);
} @catch (OFInvalidArgumentException *e) {
_encoding = OFStringEncodingISO8859_1;
}
} else
_encoding = OFStringEncodingISO8859_1;
/*
* Get it via localeconv() instead of from the Locale struct,
* to make sure we and printf etc. have the same expectations.
*/
_decimalPoint = [[OFString alloc]
initWithCString: localeconv()->decimal_point
|
︙ | | | ︙ | |