17 #ifndef NO_LOCALE_CHARMAP
21 #ifdef HAVE_LANGINFO_H
27 #if defined __GNUC__ && __GNUC__ >= 4
28 #pragma GCC visibility push(default)
35 #pragma GCC visibility pop
57 #define ENCODING_COUNT ENCINDEX_BUILTIN_MAX
58 #define UNSPECIFIED_ENCODING INT_MAX
60 #define ENCODING_NAMELEN_MAX 63
61 #define valid_encoding_name_p(name) ((name) && strlen(name) <= ENCODING_NAMELEN_MAX)
63 #define enc_autoload_p(enc) (!rb_enc_mbmaxlen(enc))
78 #define is_data_encoding(obj) (RTYPEDDATA_P(obj) && RTYPEDDATA_TYPE(obj) == &encoding_data_type)
92 rb_bug(
"rb_enc_from_encoding_index(%d): no rb_encoding_list", idx);
96 rb_bug(
"rb_enc_from_encoding_index(%d): not created yet", idx);
105 if (!encoding)
return Qnil;
196 if (
enc_table.size >= newsize)
return newsize;
197 newsize = (newsize + 7) / 8 * 8;
223 *ent->
enc = *encoding;
226 memset(ent->
enc, 0,
sizeof(*ent->
enc));
437 return name[0] ==
'U' && name[1] ==
'T' && name[2] ==
'F' && name[4] !=
'7';
503 #define ENC_REGISTER(enc) enc_register_at(ENCINDEX_##enc, rb_enc_name(&OnigEncoding##enc), &OnigEncoding##enc)
517 if (index < 0 ||
enc_table.count <= index) {
528 if (!name)
return -1;
566 if (
NIL_P(loaded))
return -1;
582 }
while (
enc_table.list[i].enc != base && (++i, 1));
611 rb_warn(
"failed to load encoding (%s); use ASCII-8BIT instead",
623 if (idx < 0) idx = 0;
677 if (
NIL_P(obj))
break;
759 if (idx1 < 0 || idx2 < 0)
854 return min <= e-p ? min : (int)(e-p);
877 c = (
unsigned char)*p;
908 #undef rb_enc_codepoint
975 if ((
int)idx == (int)arg[0]) {
1090 if (!enc)
return Qnil;
1180 #if defined NO_LOCALE_CHARMAP
1182 #elif defined _WIN32 || defined __CYGWIN__
1183 char cp[
sizeof(int) * 8 / 3 + 4];
1184 snprintf(cp,
sizeof cp,
"CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP());
1220 int overridden =
FALSE;
1222 if (def->
index != -2)
1226 if (
NIL_P(encoding)) {
1238 if (def == &default_external)
1247 if (default_external.
enc)
return default_external.
enc;
1249 if (default_external.
index >= 0) {
1251 return default_external.
enc;
1299 if (
NIL_P(encoding)) {
1322 rb_warning(
"setting Encoding.default_external");
1332 if (!default_internal.
enc && default_internal.
index >= 0) {
1335 return default_internal.
enc;
1405 rb_warning(
"setting Encoding.default_internal");
1438 #if defined NO_LOCALE_CHARMAP
1440 #elif defined _WIN32 || defined __CYGWIN__
1443 char cp[
sizeof(int) * 3 + 4];
1445 UINT codepage = GetConsoleCP();
1446 if(!codepage) codepage = GetACP();
1447 snprintf(cp,
sizeof(cp),
"CP%d", codepage);
1451 #elif defined HAVE_LANGINFO_H
1453 codeset = nl_langinfo(CODESET);
1464 char *s = (
char *)name;
1465 int haslower = 0, hasupper = 0, valid = 0;
1470 while (*++s && (
ISALNUM(*s) || *s ==
'_')) {
1471 if (
ISLOWER(*s)) haslower = 1;
1479 if (!valid || haslower) {
1482 if (!haslower || !hasupper) {
1484 if (
ISLOWER(*s)) haslower = 1;
1485 if (
ISUPPER(*s)) hasupper = 1;
1486 }
while (*++s && (!haslower || !hasupper));
1503 for (s = (
char *)name; *s; ++s) {
1547 VALUE aliases = p[0], ary = p[1];
1548 int idx = (int)orig;
1594 #define rb_intern(str) rb_intern_const(str)
1635 #define ctype_test(c, ctype) \
1636 (rb_isascii(c) && ONIGENC_IS_ASCII_CODE_CTYPE((c), (ctype)))