mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* encoding.c (get_filesystem_encoding): removed.
* encoding.c (rb_locale_encindex): added. * encoding.c (rb_filesystem_encindex): added. * encoding.c (rb_filesystem_encindex): add an alias 'filesystem'. [ruby-dev:39574] * encoding.c (enc_find): add rdoc about special aliases. * gem_prelude.rb (Gem.set_home): use Encoding.find('filesystem'). * gem_prelude.rb (Gem.set_paths): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e2e09b8125
commit
7a884fe466
4 changed files with 60 additions and 35 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
||||||
|
Wed Oct 28 16:32:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* encoding.c (get_filesystem_encoding): removed.
|
||||||
|
|
||||||
|
* encoding.c (rb_locale_encindex): added.
|
||||||
|
|
||||||
|
* encoding.c (rb_filesystem_encindex): added.
|
||||||
|
|
||||||
|
* encoding.c (rb_filesystem_encindex): add an alias 'filesystem'.
|
||||||
|
[ruby-dev:39574]
|
||||||
|
|
||||||
|
* encoding.c (enc_find): add rdoc about special aliases.
|
||||||
|
|
||||||
|
* gem_prelude.rb (Gem.set_home): use Encoding.find('filesystem').
|
||||||
|
|
||||||
|
* gem_prelude.rb (Gem.set_paths): ditto.
|
||||||
|
|
||||||
Wed Oct 28 15:02:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
|
Wed Oct 28 15:02:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* gem_prelude.rb (Gem.set_home):
|
* gem_prelude.rb (Gem.set_home):
|
||||||
|
|
72
encoding.c
72
encoding.c
|
@ -984,6 +984,14 @@ enc_list(VALUE klass)
|
||||||
* Encoding.find("US-ASCII") => #<Encoding:US-ASCII>
|
* Encoding.find("US-ASCII") => #<Encoding:US-ASCII>
|
||||||
* Encoding.find(:Shift_JIS) => #<Encoding:Shift_JIS>
|
* Encoding.find(:Shift_JIS) => #<Encoding:Shift_JIS>
|
||||||
*
|
*
|
||||||
|
* Names which this method accept are encoding names and aliases
|
||||||
|
* including following special aliases
|
||||||
|
*
|
||||||
|
* * external (default external encoding)
|
||||||
|
* * internal (default internal encoding)
|
||||||
|
* * locale (locale encoding)
|
||||||
|
* * filesystem (filesystem encoding)
|
||||||
|
*
|
||||||
* An ArgumentError is raised when no encoding with <i>name</i>.
|
* An ArgumentError is raised when no encoding with <i>name</i>.
|
||||||
* Only +Encoding.find("internal")+ however returns nil when no encoding named "internal",
|
* Only +Encoding.find("internal")+ however returns nil when no encoding named "internal",
|
||||||
* in other words, when Ruby has no default internal encoding.
|
* in other words, when Ruby has no default internal encoding.
|
||||||
|
@ -1084,8 +1092,8 @@ rb_usascii_encindex(void)
|
||||||
return ENCINDEX_US_ASCII;
|
return ENCINDEX_US_ASCII;
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_encoding *
|
static int
|
||||||
rb_locale_encoding(void)
|
rb_locale_encindex(void)
|
||||||
{
|
{
|
||||||
VALUE charmap = rb_locale_charmap(rb_cEncoding);
|
VALUE charmap = rb_locale_charmap(rb_cEncoding);
|
||||||
int idx;
|
int idx;
|
||||||
|
@ -1097,41 +1105,40 @@ rb_locale_encoding(void)
|
||||||
|
|
||||||
if (rb_enc_registered("locale") < 0) enc_alias_internal("locale", idx);
|
if (rb_enc_registered("locale") < 0) enc_alias_internal("locale", idx);
|
||||||
|
|
||||||
return rb_enc_from_index(idx);
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
rb_encoding *
|
||||||
|
rb_locale_encoding(void)
|
||||||
|
{
|
||||||
|
return rb_enc_from_index(rb_locale_encindex());
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rb_filesystem_encindex(void)
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
#if defined NO_LOCALE_CHARMAP
|
||||||
|
idx = rb_enc_to_index(rb_default_external_encoding());
|
||||||
|
#elif defined _WIN32 || defined __CYGWIN__
|
||||||
|
char cp[sizeof(int) * 8 / 3 + 4];
|
||||||
|
snprintf(cp, sizeof cp, "CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP());
|
||||||
|
idx = rb_enc_find_index(cp);
|
||||||
|
#elif defined __APPLE__
|
||||||
|
idx = rb_utf8_encindex();
|
||||||
|
#else
|
||||||
|
idx = rb_locale_encindex();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (rb_enc_registered("filesystem") < 0) enc_alias_internal("filesystem", idx);
|
||||||
|
|
||||||
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_encoding *
|
rb_encoding *
|
||||||
rb_filesystem_encoding(void)
|
rb_filesystem_encoding(void)
|
||||||
{
|
{
|
||||||
rb_encoding *enc;
|
return rb_enc_from_index(rb_filesystem_encindex());
|
||||||
#if defined NO_LOCALE_CHARMAP
|
|
||||||
enc = rb_default_external_encoding();
|
|
||||||
#elif defined _WIN32 || defined __CYGWIN__
|
|
||||||
char cp[sizeof(int) * 8 / 3 + 4];
|
|
||||||
snprintf(cp, sizeof cp, "CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP());
|
|
||||||
enc = rb_enc_find(cp);
|
|
||||||
#elif defined __APPLE__
|
|
||||||
enc = rb_utf8_encoding();
|
|
||||||
#else
|
|
||||||
enc = rb_locale_encoding();
|
|
||||||
#endif
|
|
||||||
return enc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* Encoding.filesystem_encoding => enc
|
|
||||||
*
|
|
||||||
* Returns filesystem encoding.
|
|
||||||
*
|
|
||||||
* It is locale encoding on Unix,
|
|
||||||
* the currrent ANSI (or OEM unless AreFileApisANSI) code page on Windows,
|
|
||||||
* UTF-8 on Mac OS X.
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
get_filesystem_encoding(VALUE klass)
|
|
||||||
{
|
|
||||||
return rb_enc_from_encoding(rb_filesystem_encoding());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct default_encoding {
|
struct default_encoding {
|
||||||
|
@ -1479,7 +1486,6 @@ Init_Encoding(void)
|
||||||
rb_define_method(rb_cEncoding, "_dump", enc_dump, -1);
|
rb_define_method(rb_cEncoding, "_dump", enc_dump, -1);
|
||||||
rb_define_singleton_method(rb_cEncoding, "_load", enc_load, 1);
|
rb_define_singleton_method(rb_cEncoding, "_load", enc_load, 1);
|
||||||
|
|
||||||
rb_define_singleton_method(rb_cEncoding, "filesystem_encoding", get_filesystem_encoding, 0);
|
|
||||||
rb_define_singleton_method(rb_cEncoding, "default_external", get_default_external, 0);
|
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_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", get_default_internal, 0);
|
||||||
|
|
|
@ -67,7 +67,7 @@ if defined?(Gem) then
|
||||||
|
|
||||||
def self.set_home(home)
|
def self.set_home(home)
|
||||||
home = home.gsub File::ALT_SEPARATOR, File::SEPARATOR if File::ALT_SEPARATOR
|
home = home.gsub File::ALT_SEPARATOR, File::SEPARATOR if File::ALT_SEPARATOR
|
||||||
@gem_home = home.force_encoding(Encoding.filesystem_encoding)
|
@gem_home = home.force_encoding(Encoding.find('filesystem'))
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.set_paths(gpaths)
|
def self.set_paths(gpaths)
|
||||||
|
@ -87,7 +87,7 @@ if defined?(Gem) then
|
||||||
end
|
end
|
||||||
|
|
||||||
@gem_path.uniq!
|
@gem_path.uniq!
|
||||||
@gem_path.map!{|x|x.force_encoding(Encoding.filesystem_encoding)}
|
@gem_path.map!{|x|x.force_encoding(Encoding.find('filesystem'))}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.user_home
|
def self.user_home
|
||||||
|
|
|
@ -37,6 +37,8 @@ class TestEncoding < Test::Unit::TestCase
|
||||||
|
|
||||||
def test_find
|
def test_find
|
||||||
assert_raise(ArgumentError) { Encoding.find("foobarbazqux") }
|
assert_raise(ArgumentError) { Encoding.find("foobarbazqux") }
|
||||||
|
assert_nothing_raised{Encoding.find("locale")}
|
||||||
|
assert_nothing_raised{Encoding.find("filesystem")}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_dummy_p
|
def test_dummy_p
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue