Changeset 29268

Show
Ignore:
Timestamp:
01/30/09 12:30:29 (4 years ago)
Author:
isaisstillalive
Message:
  • String#lengthの上書きはやはり問題があったのでmultibyte_lengthに変更。
  • String#[]の上書きも問題ありそうな気がするのでmultibyte_substringに変更。
Location:
lang/ruby/ruwin
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ruwin/lib/ruwin.rb

    r29247 r29268  
    9090class String 
    9191  if VERSION.match /^1\.8/ 
    92     alias _original_substring [] 
    93     def [] *args 
    94       return _original_substring(*args) if args[0].kind_of?(String) || args[0].kind_of?(Regexp) 
     92    def multibyte_substring *args 
     93      return self[*args] if args[0].kind_of?(String) || args[0].kind_of?(Regexp) 
    9594       
    9695      chars = multibyte_chars[*args] 
     
    102101    end 
    103102     
    104     def length 
     103    def multibyte_length 
    105104      multibyte_chars.size 
    106105    end 
  • lang/ruby/ruwin/lib/ruwin/edit_field.rb

    r29230 r29268  
    3333       
    3434      def physical_substring physical_first, physical_last 
    35         physical_string[physical_first...physical_last] 
     35        physical_string.multibyte_substring(physical_first...physical_last) 
    3636      end 
    3737      alias substring physical_substring 
     
    3939       
    4040      def logical_substring logical_first, logical_last 
    41         logical_string[logical_first...logical_last] 
     41        logical_string.multibyte_substring(logical_first...logical_last) 
    4242      end 
    4343      private :logical_substring 
     
    4545       
    4646      def physical_length 
    47         physical_string.length 
     47        physical_string.multibyte_length 
    4848      end 
    4949      alias length physical_length 
     
    5151       
    5252      def logical_length 
    53         logical_string.length 
     53        logical_string.multibyte_length 
    5454      end 
    5555      private :logical_length 
     
    9191      def selection_string 
    9292        first, last = get_physical_selection 
    93         physical_string[first...last] 
     93        physical_string.multibyte_substring(first...last) 
    9494      end 
    9595       
     
    192192      private 
    193193      def count_br physical_first, physical_length 
    194         (string[physical_first, physical_length]+" ").split("\r").size-1 
     194        (string.multibyte_substring(physical_first, physical_length)+" ").split("\r").size-1 
    195195      end 
    196196       
  • lang/ruby/ruwin/test/test_ruwin.rb

    r29223 r29268  
    5050   
    5151   
    52   def test_string_length 
    53     assert_equal 3, "ABC".length 
     52  def test_string_multibyte_length 
     53    assert_equal 3, "ABC".multibyte_length 
    5454  end 
    5555   
    56   def test_multibyte_string_length_utf8 
    57     assert_equal 3, NKF.nkf("-Ww", "あいう").length 
     56  def test_multibyte_string_multibyte_length_utf8 
     57    assert_equal 3, NKF.nkf("-Ww", "あいう").multibyte_length 
    5858  end 
    5959   
    60   def test_multibyte_string_length_sjis 
    61     assert_equal 3, NKF.nkf("-Ws", "あいう").length 
     60  def test_multibyte_string_multibyte_length_sjis 
     61    assert_equal 3, NKF.nkf("-Ws", "あいう").multibyte_length 
    6262  end 
    6363   
    6464   
    6565  def test_string_substring 
    66     assert_equal "BCD", "ABCDE"[1...4] 
     66    assert_equal "BCD", "ABCDE".multibyte_substring(1...4) 
    6767  end 
    6868   
    6969  def test_string_substring_substr 
    70     assert_equal "BCD", "ABCDE"["BCD"] 
     70    assert_equal "BCD", "ABCDE".multibyte_substring("BCD") 
    7171  end 
    7272   
    7373  def test_string_substring_regexp 
    74     assert_equal "BCD", "ABCDE"[/BCD/] 
     74    assert_equal "BCD", "ABCDE".multibyte_substring(/BCD/) 
    7575  end 
    7676   
    7777  def test_string_substring_index 
    78     assert_equal "B", "ABCDE"[1] 
     78    assert_equal "B", "ABCDE".multibyte_substring(1) 
    7979  end 
    8080   
    8181  def test_multibyte_string_substring_utf8 
    82     assert_equal NKF.nkf("-Ww", "いうえ"), NKF.nkf("-Ww", "あいうえお")[1...4] 
     82    assert_equal NKF.nkf("-Ww", "いうえ"), NKF.nkf("-Ww", "あいうえお").multibyte_substring(1...4) 
    8383  end 
    8484   
    8585  def test_multibyte_string_substring_usjis 
    86     assert_equal NKF.nkf("-Ws", "いうえ"), NKF.nkf("-Ws", "あいうえお")[1...4] 
     86    assert_equal NKF.nkf("-Ws", "いうえ"), NKF.nkf("-Ws", "あいうえお").multibyte_substring(1...4) 
    8787  end 
    8888end