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>
|
||||
|
||||
* 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(: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>.
|
||||
* Only +Encoding.find("internal")+ however returns nil when no encoding named "internal",
|
||||
* in other words, when Ruby has no default internal encoding.
|
||||
|
@ -1084,8 +1092,8 @@ rb_usascii_encindex(void)
|
|||
return ENCINDEX_US_ASCII;
|
||||
}
|
||||
|
||||
rb_encoding *
|
||||
rb_locale_encoding(void)
|
||||
static int
|
||||
rb_locale_encindex(void)
|
||||
{
|
||||
VALUE charmap = rb_locale_charmap(rb_cEncoding);
|
||||
int idx;
|
||||
|
@ -1097,41 +1105,40 @@ rb_locale_encoding(void)
|
|||
|
||||
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_filesystem_encoding(void)
|
||||
{
|
||||
rb_encoding *enc;
|
||||
#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());
|
||||
return rb_enc_from_index(rb_filesystem_encindex());
|
||||
}
|
||||
|
||||
struct default_encoding {
|
||||
|
@ -1479,7 +1486,6 @@ Init_Encoding(void)
|
|||
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, "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=", set_default_external, 1);
|
||||
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)
|
||||
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
|
||||
|
||||
def self.set_paths(gpaths)
|
||||
|
@ -87,7 +87,7 @@ if defined?(Gem) then
|
|||
end
|
||||
|
||||
@gem_path.uniq!
|
||||
@gem_path.map!{|x|x.force_encoding(Encoding.filesystem_encoding)}
|
||||
@gem_path.map!{|x|x.force_encoding(Encoding.find('filesystem'))}
|
||||
end
|
||||
|
||||
def self.user_home
|
||||
|
|
|
@ -37,6 +37,8 @@ class TestEncoding < Test::Unit::TestCase
|
|||
|
||||
def test_find
|
||||
assert_raise(ArgumentError) { Encoding.find("foobarbazqux") }
|
||||
assert_nothing_raised{Encoding.find("locale")}
|
||||
assert_nothing_raised{Encoding.find("filesystem")}
|
||||
end
|
||||
|
||||
def test_dummy_p
|
||||
|
|
Loading…
Reference in a new issue