19 #undef rb_ascii8bit_encindex
20 #undef rb_utf8_encindex
21 #undef rb_usascii_encindex
23 #if defined __GNUC__ && __GNUC__ >= 4
24 #pragma GCC visibility push(default)
33 #pragma GCC visibility pop
55 #define ENCODING_COUNT ENCINDEX_BUILTIN_MAX
56 #define UNSPECIFIED_ENCODING INT_MAX
58 #define ENCODING_NAMELEN_MAX 63
59 #define valid_encoding_name_p(name) ((name) && strlen(name) <= ENCODING_NAMELEN_MAX)
61 #define enc_autoload_p(enc) (!rb_enc_mbmaxlen(enc))
77 #define is_data_encoding(obj) (RTYPEDDATA_P(obj) && RTYPEDDATA_TYPE(obj) == &encoding_data_type)
78 #define is_obj_encoding(obj) (RB_TYPE_P((obj), T_DATA) && is_data_encoding(obj))
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;
231 if (idx < 0)
return NULL;
246 if (
enc_table.size >= newsize)
return newsize;
247 newsize = (newsize + 7) / 8 * 8;
273 *ent->
enc = *encoding;
276 memset(ent->
enc, 0,
sizeof(*ent->
enc));
569 #define ENC_REGISTER(enc) enc_register_at(ENCINDEX_##enc, rb_enc_name(&OnigEncoding##enc), &OnigEncoding##enc)
574 #define ENCDB_REGISTER(name, enc) enc_register_at(ENCINDEX_##enc, name, NULL)
585 #undef ENCDB_REGISTER
612 if (!name)
return -1;
652 if (
NIL_P(loaded))
return -1;
668 }
while (
enc_table.list[i].enc != base && (++i, 1));
699 rb_warn(
"failed to load encoding (%s); use ASCII-8BIT instead",
711 if (idx < 0) idx = 0;
765 if (
NIL_P(obj))
break;
801 int oldidx, oldtermlen, termlen;
858 if (idx1 < 0 || idx2 < 0)
878 if (!isstr2 && idx2 == ENCINDEX_US_ASCII)
880 if (!isstr1 && idx1 == ENCINDEX_US_ASCII)
953 return min <= e-p ? min : (int)(e-p);
976 c = (
unsigned char)*p;
1006 #undef rb_enc_codepoint
1023 #undef rb_enc_code_to_mbclen
1089 if ((
int)idx == (int)arg[0]) {
1207 if (!enc)
return Qnil;
1232 return enc_table.list[ENCINDEX_ASCII].enc;
1238 return ENCINDEX_ASCII;
1247 return enc_table.list[ENCINDEX_UTF_8].enc;
1253 return ENCINDEX_UTF_8;
1262 return enc_table.list[ENCINDEX_US_ASCII].enc;
1268 return ENCINDEX_US_ASCII;
1278 idx = ENCINDEX_US_ASCII;
1280 idx = ENCINDEX_ASCII;
1304 idx = ENCINDEX_ASCII;
1326 int overridden =
FALSE;
1328 if (def->
index != -2)
1332 if (
NIL_P(encoding)) {
1344 if (def == &default_external)
1353 if (default_external.
enc)
return default_external.
enc;
1355 if (default_external.
index >= 0) {
1357 return default_external.
enc;
1405 if (
NIL_P(encoding)) {
1428 rb_warning(
"setting Encoding.default_external");
1438 if (!default_internal.
enc && default_internal.
index >= 0) {
1441 return default_internal.
enc;
1510 rb_warning(
"setting Encoding.default_internal");
1547 char *s = (
char *)name;
1548 int haslower = 0, hasupper = 0, valid = 0;
1553 while (*++s && (
ISALNUM(*s) || *s ==
'_')) {
1554 if (
ISLOWER(*s)) haslower = 1;
1562 if (!valid || haslower) {
1563 size_t len = s -
name;
1565 if (!haslower || !hasupper) {
1567 if (
ISLOWER(*s)) haslower = 1;
1568 if (
ISUPPER(*s)) hasupper = 1;
1569 }
while (*++s && (!haslower || !hasupper));
1586 for (s = (
char *)name; *s; ++s) {
1630 VALUE aliases = p[0], ary = p[1];
1631 int idx = (int)orig;
1877 #define rb_intern(str) rb_intern_const(str)
1918 #define ctype_test(c, ctype) \
1919 (rb_isascii(c) && ONIGENC_IS_ASCII_CODE_CTYPE((c), (ctype)))