[前][次][番号順一覧][スレッド一覧]

ruby-changes:18540

From: yugui <ko1@a...>
Date: Sun, 16 Jan 2011 21:40:18 +0900 (JST)
Subject: [ruby-changes:18540] Ruby:r30563 (ruby_1_9_2): merges r30448 and r30498 from trunk into ruby_1_9_2.

yugui	2011-01-16 21:34:36 +0900 (Sun, 16 Jan 2011)

  New Revision: 30563

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30563

  Log:
    merges r30448 and r30498 from trunk into ruby_1_9_2.
    --
    
    * 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.
    --
    * lib/irb/locale.rb (IRB::Locale::LOCALE_NAME_RE):
      some platoform has a locale without territory but with
      encoding.
      (#each_sub_locale): ditto.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/lib/irb/locale.rb
    branches/ruby_1_9_2/version.h

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 30562)
+++ ruby_1_9_2/ChangeLog	(revision 30563)
@@ -1,3 +1,19 @@
+Sun Jan  9 16:31:34 2011  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* lib/irb/locale.rb (IRB::Locale::LOCALE_NAME_RE): 
+	  some platoform has a locale without territory but with 
+	  encoding.
+	  (#each_sub_locale): ditto.
+
+Sat Jan  1 17:02:50 2011  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* 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.
+
 Fri Dec 31 03:23:26 2010  NARUSE, Yui  <naruse@r...>
 
 	* vsnprintf.c (BSD__uqtoa): Fix overflow when long != quad_t.
Index: ruby_1_9_2/lib/irb/locale.rb
===================================================================
--- ruby_1_9_2/lib/irb/locale.rb	(revision 30562)
+++ ruby_1_9_2/lib/irb/locale.rb	(revision 30563)
@@ -13,16 +13,10 @@
     @RCS_ID='-$Id$-'
 
     LOCALE_NAME_RE = %r[
-      (?<language>[[:alpha:]]{2})
-      (?:_
-       (?<territory>[[:alpha:]]{2,3})
-       (?:\.
-	(?<codeset>[^@]+)
-       )?
-      )?
-      (?:@
-       (?<modifier>.*)
-      )?
+      (?<language>[[:alpha:]]{2,3})
+      (?:_  (?<territory>[[:alpha:]]{2,3}) )?
+      (?:\. (?<codeset>[^@]+) )?
+      (?:@  (?<modifier>.*) )?
     ]x
     LOCALE_DIR = "/lc/"
 
@@ -50,7 +44,7 @@
     def String(mes)
       mes = super(mes)
       if @encoding
-	mes.encode(@encoding)
+	mes.encode(@encoding, undef: :replace)
       else
 	mes
       end
@@ -111,22 +105,27 @@
     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
+      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
-
-      for path in $:
-	lc_path = search_file(path + "/" + dir, base)
-	return real_load(lc_path, priv) if lc_path
-      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,42 +134,31 @@
 	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)
+        yield lc.nil? ? File.join(dir, LOCALE_DIR, file) : File.join(dir, LOCALE_DIR, lc, file)
       end
-      nil
     end
-    private :search_file
 
-    def lc_path(file = "", lc = @locale)
-      if lc.nil?
-	LOCALE_DIR + file
-      else
-	LOCALE_DIR + @lang + "/" + file
-      end
-    end
-    private :lc_path
-
     def each_sublocale
       if @lang
 	if @territory
@@ -181,15 +169,14 @@
 	  yield "#{@lang}_#{@territory}@#{@modifier}" if @modifier
 	  yield "#{@lang}_#{@territory}"
 	end
+        if @encoding_name
+          yield "#{@lang}.#{@encoding_name}@#{@modifier}" if @modifier
+          yield "#{@lang}.#{@encoding_name}"
+        end
 	yield "#{@lang}@#{@modifier}" if @modifier
 	yield "#{@lang}"
       end
       yield nil
     end
-    private :each_sublocale
   end
 end
-
-
-
-
Index: ruby_1_9_2/version.h
===================================================================
--- ruby_1_9_2/version.h	(revision 30562)
+++ ruby_1_9_2/version.h	(revision 30563)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.2"
-#define RUBY_PATCHLEVEL 143
+#define RUBY_PATCHLEVEL 144
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]