ruby-changes:7615
From: akr <ko1@a...>
Date: Thu, 4 Sep 2008 23:20:31 +0900 (JST)
Subject: [ruby-changes:7615] Ruby:r19136 (trunk): * enc/trans/newline.trans: record newline types met in universal
akr 2008-09-04 23:20:14 +0900 (Thu, 04 Sep 2008) New Revision: 19136 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19136 Log: * enc/trans/newline.trans: record newline types met in universal newline decoder. Modified files: trunk/ChangeLog trunk/enc/trans/newline.trans Index: ChangeLog =================================================================== --- ChangeLog (revision 19135) +++ ChangeLog (revision 19136) @@ -1,3 +1,8 @@ +Thu Sep 4 23:18:55 2008 Tanaka Akira <akr@f...> + + * enc/trans/newline.trans: record newline types met in universal + newline decoder. + Thu Sep 4 23:05:54 2008 Yuki Sonoda (Yugui) <yugui@y...> * lib/prime.rb (Prime::OldCompatibility#each): added compatibility to Index: enc/trans/newline.trans =================================================================== --- enc/trans/newline.trans (revision 19135) +++ enc/trans/newline.trans (revision 19136) @@ -21,14 +21,22 @@ <%= transcode_generated_code %> +#define STATE (sp[0]) #define NORMAL 0 #define JUST_AFTER_CR 1 +/* no way to access this information, yet. */ +#define NEWLINES_MET (sp[1]) +#define MET_LF 0x01 +#define MET_CRLF 0x02 +#define MET_CR 0x04 + static int universal_newline_init(void *statep) { unsigned char *sp = statep; - *sp = NORMAL; + STATE = NORMAL; + NEWLINES_MET = 0; return 0; } @@ -38,25 +46,32 @@ unsigned char *sp = statep; int len; if (s[0] == '\n') { - if (*sp == NORMAL) { + if (STATE == NORMAL) { + NEWLINES_MET |= MET_LF; o[0] = '\n'; len = 1; } else { /* JUST_AFTER_CR */ + NEWLINES_MET |= MET_CRLF; len = 0; } - *sp = NORMAL; + STATE = NORMAL; } - else if (s[0] == '\r') { - o[0] = '\n'; - len = 1; - *sp = JUST_AFTER_CR; - } else { - o[0] = s[0]; - len = 1; - *sp = NORMAL; + if (STATE == JUST_AFTER_CR) + NEWLINES_MET |= MET_CR; + if (s[0] == '\r') { + o[0] = '\n'; + len = 1; + STATE = JUST_AFTER_CR; + } + else { + o[0] = s[0]; + len = 1; + STATE = NORMAL; + } } + return len; } @@ -68,7 +83,7 @@ 1, /* max_input */ 1, /* max_output */ stateful_decoder, /* stateful_type */ - 1, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */ + 2, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */ NULL, NULL, NULL, fun_so_universal_newline }; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/