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

ruby-changes:14194

From: yugui <ko1@a...>
Date: Sat, 5 Dec 2009 18:48:54 +0900 (JST)
Subject: [ruby-changes:14194] Ruby:r26015 (ruby_1_9_1): merges r25883 from trunk into ruby_1_9_1. fixes a backpor task #2168.

yugui	2009-12-05 18:40:25 +0900 (Sat, 05 Dec 2009)

  New Revision: 26015

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

  Log:
    merges r25883 from trunk into ruby_1_9_1. fixes a backpor task #2168.
    --
    * enc/trans/newline.trans (fun_so_universal_newline): generate \n
      after \r\n detection instead of just after \r.
      [ruby-list:45988] [ruby-core:25881] [ruby-core:26788]

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/enc/trans/newline.trans
    branches/ruby_1_9_1/test/ruby/test_econv.rb
    branches/ruby_1_9_1/test/ruby/test_io_m17n.rb
    branches/ruby_1_9_1/version.h

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 26014)
+++ ruby_1_9_1/ChangeLog	(revision 26015)
@@ -1,3 +1,9 @@
+Mon Nov 23 04:12:00 2009  Tanaka Akira  <akr@f...>
+
+	* enc/trans/newline.trans (fun_so_universal_newline): generate \n
+	  after \r\n detection instead of just after \r.
+	  [ruby-list:45988] [ruby-core:25881] [ruby-core:26788]
+
 Tue Dec  1 12:01:13 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (dyna_push_gen, dyna_pop_gen): no needs to save both of
Index: ruby_1_9_1/enc/trans/newline.trans
===================================================================
--- ruby_1_9_1/enc/trans/newline.trans	(revision 26014)
+++ ruby_1_9_1/enc/trans/newline.trans	(revision 26015)
@@ -48,26 +48,26 @@
     if (s[0] == '\n') {
         if (STATE == NORMAL) {
             NEWLINES_MET |= MET_LF;
-            o[0] = '\n';
-            len = 1;
         }
         else { /* JUST_AFTER_CR */
             NEWLINES_MET |= MET_CRLF;
-            len = 0;
         }
+        o[0] = '\n';
+        len = 1;
         STATE = NORMAL;
     }
     else {
-        if (STATE == JUST_AFTER_CR)
+        len = 0;
+        if (STATE == JUST_AFTER_CR) {
+            o[0] = '\n';
+            len = 1;
             NEWLINES_MET |= MET_CR;
+        }
         if (s[0] == '\r') {
-            o[0] = '\n';
-            len = 1;
             STATE = JUST_AFTER_CR;
         }
         else {
-            o[0] = s[0];
-            len = 1;
+            o[len++] = s[0];
             STATE = NORMAL;
         }
     }
@@ -79,10 +79,14 @@
 universal_newline_finish(void *statep, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
-    if (STATE == JUST_AFTER_CR)
+    int len = 0;
+    if (STATE == JUST_AFTER_CR) {
+        o[0] = '\n';
+        len = 1;
         NEWLINES_MET |= MET_CR;
+    }
     STATE = NORMAL;
-    return 0;
+    return len;
 }
 
 static const rb_transcoder
@@ -91,7 +95,7 @@
     TRANSCODE_TABLE_INFO,
     1, /* input_unit_length */
     1, /* max_input */
-    1, /* max_output */
+    2, /* max_output */
     asciicompat_converter, /* asciicompat_type */
     2, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */
     NULL, NULL, NULL, fun_so_universal_newline,
Index: ruby_1_9_1/version.h
===================================================================
--- ruby_1_9_1/version.h	(revision 26014)
+++ ruby_1_9_1/version.h	(revision 26015)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.1"
-#define RUBY_PATCHLEVEL 368
+#define RUBY_PATCHLEVEL 369
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1
Index: ruby_1_9_1/test/ruby/test_io_m17n.rb
===================================================================
--- ruby_1_9_1/test/ruby/test_io_m17n.rb	(revision 26014)
+++ ruby_1_9_1/test/ruby/test_io_m17n.rb	(revision 26015)
@@ -1506,7 +1506,6 @@
         assert_equal("a", f.getc)
         assert_equal("\n", f.getc)
         f.binmode
-        assert_equal("\n", f.getc)
         assert_equal("b", f.getc)
         assert_equal("\r", f.getc)
         assert_equal("\n", f.getc)
@@ -1526,7 +1525,6 @@
         assert_equal("a", f.getc)
         assert_equal("\n", f.getc)
         f.binmode
-        assert_equal("\n", f.getc)
         assert_equal("b", f.getc)
         assert_equal("\r", f.getc)
         assert_equal("\n", f.getc)
Index: ruby_1_9_1/test/ruby/test_econv.rb
===================================================================
--- ruby_1_9_1/test/ruby/test_econv.rb	(revision 26014)
+++ ruby_1_9_1/test/ruby/test_econv.rb	(revision 26015)
@@ -399,7 +399,7 @@
     src << "abc\r\ndef"; check_ec("abc\ndef",                             "", :source_buffer_empty, *a)
     src << "ghi\njkl";   check_ec("abc\ndefghi\njkl",                     "", :source_buffer_empty, *a)
     src << "mno\rpqr";   check_ec("abc\ndefghi\njklmno\npqr",             "", :source_buffer_empty, *a)
-    src << "stu\r";      check_ec("abc\ndefghi\njklmno\npqrstu\n",        "", :source_buffer_empty, *a)
+    src << "stu\r";      check_ec("abc\ndefghi\njklmno\npqrstu",          "", :source_buffer_empty, *a)
     src << "\nvwx";      check_ec("abc\ndefghi\njklmno\npqrstu\nvwx",     "", :source_buffer_empty, *a)
     src << "\nyz";       check_ec("abc\ndefghi\njklmno\npqrstu\nvwx\nyz", "", :source_buffer_empty, *a)
   end
@@ -410,11 +410,25 @@
     src << "abc\r\ndef"; check_ec("abc\ndef",                             "", :source_buffer_empty, *a)
     src << "ghi\njkl";   check_ec("abc\ndefghi\njkl",                     "", :source_buffer_empty, *a)
     src << "mno\rpqr";   check_ec("abc\ndefghi\njklmno\npqr",             "", :source_buffer_empty, *a)
-    src << "stu\r";      check_ec("abc\ndefghi\njklmno\npqrstu\n",        "", :source_buffer_empty, *a)
+    src << "stu\r";      check_ec("abc\ndefghi\njklmno\npqrstu",          "", :source_buffer_empty, *a)
     src << "\nvwx";      check_ec("abc\ndefghi\njklmno\npqrstu\nvwx",     "", :source_buffer_empty, *a)
     src << "\nyz";       check_ec("abc\ndefghi\njklmno\npqrstu\nvwx\nyz", "", :source_buffer_empty, *a)
   end
 
+  def test_universal_newline3
+    ec = Encoding::Converter.new("", "", universal_newline: true)
+    a = ["", src="", ec, nil, 50, :partial_input=>true]
+    src << "abc\r\ndef"; check_ec("abc\ndef",                               "", :source_buffer_empty, *a)
+    src << "ghi\njkl";   check_ec("abc\ndefghi\njkl",                       "", :source_buffer_empty, *a)
+    src << "mno\rpqr";   check_ec("abc\ndefghi\njklmno\npqr",               "", :source_buffer_empty, *a)
+    src << "stu\r";      check_ec("abc\ndefghi\njklmno\npqrstu",            "", :source_buffer_empty, *a)
+    src << "\nvwx";      check_ec("abc\ndefghi\njklmno\npqrstu\nvwx",       "", :source_buffer_empty, *a)
+    src << "\nyz";       check_ec("abc\ndefghi\njklmno\npqrstu\nvwx\nyz",   "", :source_buffer_empty, *a)
+    src << "\r";         check_ec("abc\ndefghi\njklmno\npqrstu\nvwx\nyz",   "", :source_buffer_empty, *a)
+    a[-1] = nil
+    src << "";           check_ec("abc\ndefghi\njklmno\npqrstu\nvwx\nyz\n", "", :finished, *a)
+  end
+
   def test_crlf_newline
     ec = Encoding::Converter.new("UTF-8", "EUC-JP", crlf_newline: true)
     assert_econv("abc\r\ndef", :finished, 50, ec, "abc\ndef", "")

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

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