mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* encoding.c (enc_set_default_encoding): allowed to set default
encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
31c163e4c8
commit
28d1621d10
2 changed files with 82 additions and 39 deletions
|
@ -1,7 +1,7 @@
|
|||
Thu Dec 11 13:17:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
Thu Dec 11 13:36:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* encoding.c (rb_enc_set_default_internal): defines internal
|
||||
encoding as nil.
|
||||
* encoding.c (enc_set_default_encoding): allowed to set default
|
||||
encoding.
|
||||
|
||||
* encoding.c (rb_locale_encoding): removed Encoding::LOCALE.
|
||||
|
||||
|
|
115
encoding.c
115
encoding.c
|
@ -1032,16 +1032,52 @@ rb_filesystem_encoding(void)
|
|||
return enc;
|
||||
}
|
||||
|
||||
static int default_external_index;
|
||||
static rb_encoding *default_external;
|
||||
struct default_encoding {
|
||||
int index; /* -2 => not yet set, -1 => nil */
|
||||
rb_encoding *enc;
|
||||
};
|
||||
|
||||
static rb_encoding *
|
||||
enc_get_default_encoding(struct default_encoding *def)
|
||||
{
|
||||
if (!def->enc && def->index >= 0) {
|
||||
def->enc = rb_enc_from_index(def->index);
|
||||
}
|
||||
return def->enc;
|
||||
}
|
||||
|
||||
static int
|
||||
enc_set_default_encoding(struct default_encoding *def, VALUE encoding,
|
||||
const char *name, int defindex)
|
||||
{
|
||||
int overridden = Qfalse;
|
||||
if (def->index != -2)
|
||||
/* Already set */
|
||||
overridden = Qtrue;
|
||||
|
||||
if (NIL_P(encoding)) {
|
||||
def->index = -1;
|
||||
def->enc = 0;
|
||||
st_insert(enc_table.names, (st_data_t)strdup(name),
|
||||
(st_data_t)UNSPECIFIED_ENCODING);
|
||||
}
|
||||
else {
|
||||
def->index = rb_enc_to_index(rb_to_encoding(encoding));
|
||||
if (def->index == ENCINDEX_US_ASCII)
|
||||
def->index = defindex;
|
||||
def->enc = 0;
|
||||
enc_alias_internal(name, def->index);
|
||||
}
|
||||
|
||||
return overridden;
|
||||
}
|
||||
|
||||
static struct default_encoding default_external = {-2};
|
||||
|
||||
rb_encoding *
|
||||
rb_default_external_encoding(void)
|
||||
{
|
||||
if (!default_external) {
|
||||
default_external = rb_enc_from_index(default_external_index);
|
||||
}
|
||||
return default_external;
|
||||
return enc_get_default_encoding(&default_external);
|
||||
}
|
||||
|
||||
VALUE
|
||||
|
@ -1056,8 +1092,7 @@ rb_enc_default_external(void)
|
|||
*
|
||||
* Returns default external encoding.
|
||||
*
|
||||
* It is initialized by the locale or -E option,
|
||||
* and can't be modified after that.
|
||||
* It is initialized by the locale or -E option.
|
||||
*/
|
||||
static VALUE
|
||||
get_default_external(VALUE klass)
|
||||
|
@ -1068,22 +1103,30 @@ get_default_external(VALUE klass)
|
|||
void
|
||||
rb_enc_set_default_external(VALUE encoding)
|
||||
{
|
||||
default_external_index = rb_enc_to_index(rb_to_encoding(encoding));
|
||||
default_external = 0;
|
||||
enc_alias_internal("external", default_external_index);
|
||||
enc_set_default_encoding(&default_external, encoding,
|
||||
"external", ENCINDEX_US_ASCII);
|
||||
}
|
||||
|
||||
/* -2 => not yet set, -1 => nil */
|
||||
static int default_internal_index = -2;
|
||||
static rb_encoding *default_internal;
|
||||
/*
|
||||
* call-seq:
|
||||
* Encoding.default_external = enc
|
||||
*
|
||||
* Sets default external encoding.
|
||||
*/
|
||||
static VALUE
|
||||
set_default_external(VALUE klass, VALUE encoding)
|
||||
{
|
||||
rb_warning("setting Encoding.default_external");
|
||||
rb_enc_set_default_external(encoding);
|
||||
return encoding;
|
||||
}
|
||||
|
||||
static struct default_encoding default_internal = {-2};
|
||||
|
||||
rb_encoding *
|
||||
rb_default_internal_encoding(void)
|
||||
{
|
||||
if (!default_internal && default_internal_index >= 0) {
|
||||
default_internal = rb_enc_from_index(default_internal_index);
|
||||
}
|
||||
return default_internal;
|
||||
return enc_get_default_encoding(&default_internal);
|
||||
}
|
||||
|
||||
VALUE
|
||||
|
@ -1099,8 +1142,7 @@ rb_enc_default_internal(void)
|
|||
*
|
||||
* Returns default internal encoding.
|
||||
*
|
||||
* It is initialized by the source internal_encoding or -E option,
|
||||
* and can't be modified after that.
|
||||
* It is initialized by the source internal_encoding or -E option.
|
||||
*/
|
||||
static VALUE
|
||||
get_default_internal(VALUE klass)
|
||||
|
@ -1111,23 +1153,22 @@ get_default_internal(VALUE klass)
|
|||
void
|
||||
rb_enc_set_default_internal(VALUE encoding)
|
||||
{
|
||||
if (default_internal_index != -2)
|
||||
/* Already set */
|
||||
return;
|
||||
if (NIL_P(encoding)) {
|
||||
default_internal_index = -1;
|
||||
default_internal = 0;
|
||||
st_insert(enc_table.names, (st_data_t)strdup("internal"),
|
||||
(st_data_t)UNSPECIFIED_ENCODING);
|
||||
return;
|
||||
}
|
||||
enc_set_default_encoding(&default_internal, encoding,
|
||||
"internal", ENCINDEX_UTF_8);
|
||||
}
|
||||
|
||||
default_internal_index = rb_enc_to_index(rb_to_encoding(encoding));
|
||||
/* Convert US-ASCII => UTF-8 */
|
||||
if (default_internal_index == rb_usascii_encindex())
|
||||
default_internal_index = rb_utf8_encindex();
|
||||
default_internal = 0;
|
||||
enc_alias_internal("internal", default_internal_index);
|
||||
/*
|
||||
* call-seq:
|
||||
* Encoding.default_internal = enc
|
||||
*
|
||||
* Sets default internal encoding.
|
||||
*/
|
||||
static VALUE
|
||||
set_default_internal(VALUE klass, VALUE encoding)
|
||||
{
|
||||
rb_warning("setting Encoding.default_internal");
|
||||
rb_enc_set_default_internal(encoding);
|
||||
return encoding;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1316,7 +1357,9 @@ Init_Encoding(void)
|
|||
rb_define_singleton_method(rb_cEncoding, "_load", enc_load, 1);
|
||||
|
||||
rb_define_singleton_method(rb_cEncoding, "default_external", get_default_external, 0);
|
||||
rb_define_singleton_method(rb_cEncoding, "default_external=", set_default_external, 1);
|
||||
rb_define_singleton_method(rb_cEncoding, "default_internal", get_default_internal, 0);
|
||||
rb_define_singleton_method(rb_cEncoding, "default_internal=", set_default_internal, 1);
|
||||
rb_define_singleton_method(rb_cEncoding, "locale_charmap", rb_locale_charmap, 0);
|
||||
|
||||
list = rb_ary_new2(enc_table.count);
|
||||
|
|
Loading…
Add table
Reference in a new issue