[#42945] [Ruby 1.8-Bug#4231][Open] configure.bat --with-winsock2 が socket/extconf.rbに効いていない — Masahiro Kitajima <redmine@...>

Bug #4231: configure.bat --with-winsock2 が socket/extconf.rbに効いていない

8 messages 2011/01/05

[#43027] [Ruby 1.9-Feature#4280][Assigned] SJIS should be an alias of Windows-31J, not of Shift_JIS — Usaku NAKAMURA <redmine@...>

Feature #4280: SJIS should be an alias of Windows-31J, not of Shift_JIS

13 messages 2011/01/14
[#43030] [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — Motohiro KOSAKI <redmine@...> 2011/01/14

チケット #4280 が更新されました。 (by Motohiro KOSAKI)

[#43031] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43033] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — KOSAKI Motohiro <kosaki.motohiro@...> 2011/01/14

2011年1月14日16:35 U.Nakamura <usa@garbagecollect.jp>:

[#43039] ext/openssl development repository — Hiroshi Nakamura <nakahiro@...>

W3J1YnktY29yZTozNDQxNl3jga7ml6XmnKzlkJHjgZHniYjjgafjgZnjgIIKCuacgOi/kU1hcnRp

21 messages 2011/01/14
[#43040] Re: ext/openssl development repository — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43041] Re: ext/openssl development repository — Yusuke ENDOH <mame@...> 2011/01/14

遠藤です。

[#43053] Re: ext/openssl development repository — Hiroshi Nakamura <nakahiro@...> 2011/01/17

MjAxMS8xLzE0IFl1c3VrZSBFTkRPSCA8bWFtZUB0c2cubmUuanA+Ogo+Pj4gwqAgwqAgwqAgwqAg

[#43092] pthread_cond を用いたConditionVariable — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

15 messages 2011/01/24

[ruby-dev:42922] Remultilingualization of IRB.

From: Yugui <yugui@...>
Date: 2011-01-01 08:05:55 UTC
List: ruby-dev #42922
Yuguiです。主に石塚さんへ。

[ruby-core:33987]のAbinoamが私に直メールでpt_BRのirb localizatoinを送ってくれました。

日本以外でもirbを母国語で使いたいというニーズはあるでしょうし、こんなこともあろうかとr20862でlib/irb/lc/ja
に相当するlocaleサポートファイルをgemで配布して使えるようにしてありました。
"ポルトガル語対応"のようなものは全員が必要とするわけではありませんから、必要な人だけ追加できるほうがよかろうという判断です。ので、irb-pt_BR
gemを作るが良かろうという返事をしようと思いました。

ところが、Ruby 1.9.1のhighest version of
gemsを$LOAD_PATHに追加するという実装を前提としていたため、Ruby 1.9.2ではこれは機能しなくなっていたようです。
そこで、添付のパッチのようにlib/irb/locale.rbを変更したいと思います。石塚さんの反対がなければコミットしようと思いますがどうでしょうか。

-- 
Yuki Sonoda (Yugui)
yugui@yugui.jp
http://yugui.jp

Attachments (1)

irb-remultilingualization.diff (4.14 KB, text/x-diff)
commit 4f9106cec43904162d584b512ed7a5ee8839d182
Author: Yuki Sonoda (Yugui) <yugui@yugui.jp>
Date:   Sat Jan 1 17:03:45 2011 +0900

    * lib/irb/locale.rb (IRB::Locale#search_file): make it possible
      to load a localization from a gem.
      (IRB::Locale#lc_path): obsoleted because of the change of #search_file
      (IRB::Locale#each_localized_path): new private method, based on lc_path
      (IRB::Locale#find): follows the change of #search_file.
      (IRB::Locale#load): removed duplicate with #find.

diff --git a/ChangeLog b/ChangeLog
index 1ce923a..cab7961 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Jan  1 17:02:50 2011  Yuki Sonoda (Yugui)  <yugui@yugui.jp>
+
+	* lib/irb/locale.rb (IRB::Locale#search_file): make it possible
+	  to load a localization from a gem.
+	  (IRB::Locale#lc_path): obsoleted because of the change of #search_file
+	  (IRB::Locale#each_localized_path): new private method, based on lc_path
+	  (IRB::Locale#find): follows the change of #search_file.
+	  (IRB::Locale#load): removed duplicate with #find.
+
 Sat Jan  1 11:44:42 2011  Tanaka Akira  <akr@fsij.org>
 
 	* strftime.c: parenthesize macro arguments.
diff --git a/lib/irb/locale.rb b/lib/irb/locale.rb
index 9924409..b37ad08 100644
--- a/lib/irb/locale.rb
+++ b/lib/irb/locale.rb
@@ -50,7 +50,7 @@ module IRB
     def String(mes)
       mes = super(mes)
       if @encoding
-	mes.encode(@encoding)
+	mes.encode(@encoding, undef: :replace)
       else
 	mes
       end
@@ -111,22 +111,27 @@ module IRB
     alias toplevel_load load
 
     def load(file, priv=nil)
+      found = find(file)
+      if found
+        return real_load(found, priv)
+      else
+        raise LoadError, "No such file to load -- #{file}"
+      end
+    end
+
+    def find(file , paths = $:)
       dir = File.dirname(file)
       dir = "" if dir == "."
       base = File.basename(file)
 
-      if dir[0] == ?/ #/
-	lc_path = search_file(dir, base)
-	return real_load(lc_path, priv) if lc_path
-      end
-
-      for path in $:
-	lc_path = search_file(path + "/" + dir, base)
-	return real_load(lc_path, priv) if lc_path
+      if dir.start_with?('/')
+        return each_localized_path(dir, base).find{|full_path| File.readable? full_path}
+      else
+        return search_file(paths, dir, base)
       end
-      raise LoadError, "No such file to load -- #{file}"
     end
 
+    private
     def real_load(path, priv)
       src = MagicFile.open(path){|f| f.read}
       if priv
@@ -135,41 +140,30 @@ module IRB
 	eval(src, TOPLEVEL_BINDING, path)
       end
     end
-    private :real_load
 
-    def find(file , paths = $:)
-      dir = File.dirname(file)
-      dir = "" if dir == "."
-      base = File.basename(file)
-      if dir =~ /^\//
-	  return lc_path = search_file(dir, base)
-      else
-	for path in $:
-	  if lc_path = search_file(path + "/" + dir, base)
-	    return lc_path
-	  end
-	end
+    # @param paths load paths in which IRB find a localized file.
+    # @param dir directory 
+    # @param file basename to be localized
+    #
+    # typically, for the parameters and a <path> in paths, it searches
+    #   <path>/<dir>/<locale>/<file>
+    def search_file(lib_paths, dir, file)
+      each_localized_path(dir, file) do |lc_path|
+        lib_paths.each do |libpath|
+          full_path = File.join(libpath, lc_path)
+          return full_path if File.readable?(full_path)
+        end
+        redo if Gem.try_activate(lc_path)
       end
       nil
     end
 
-    def search_file(path, file)
+    def each_localized_path(dir, file)
+      return enum_for(:each_localized_path) unless block_given?
       each_sublocale do |lc|
-	full_path = path + lc_path(file, lc)
-	return full_path if File.exist?(full_path)
-      end
-      nil
-    end
-    private :search_file
-
-    def lc_path(file = "", lc = @locale)
-      if lc.nil?
-	LOCALE_DIR + file
-      else
-	LOCALE_DIR + @lang + "/" + file
+        yield lc.nil? ? File.join(dir, LOCALE_DIR, file) : File.join(dir, LOCALE_DIR, lc, file)
       end
     end
-    private :lc_path
 
     def each_sublocale
       if @lang
@@ -186,10 +180,5 @@ module IRB
       end
       yield nil
     end
-    private :each_sublocale
   end
 end
-
-
-
-

In This Thread

Prev Next