mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2971 from mattn/utf8-chop
chop with utf-8. fix #2967
This commit is contained in:
@@ -1318,7 +1318,18 @@ mrb_str_chop_bang(mrb_state *mrb, mrb_value str)
|
||||
mrb_str_modify(mrb, s);
|
||||
if (RSTR_LEN(s) > 0) {
|
||||
mrb_int len;
|
||||
#ifdef MRB_UTF8_STRING
|
||||
const char* t = RSTR_PTR(s), *p = t;
|
||||
const char* e = p + RSTR_LEN(s);
|
||||
while (p<e) {
|
||||
mrb_int clen = utf8len(p, e);
|
||||
if (p + clen>=e) break;
|
||||
p += clen;
|
||||
}
|
||||
len = p - t;
|
||||
#else
|
||||
len = RSTR_LEN(s) - 1;
|
||||
#endif
|
||||
if (RSTR_PTR(s)[len] == '\n') {
|
||||
if (len > 0 &&
|
||||
RSTR_PTR(s)[len-1] == '\r') {
|
||||
|
||||
@@ -262,6 +262,16 @@ assert('String#chop', '15.2.10.5.11') do
|
||||
assert_equal 'abc', c
|
||||
end
|
||||
|
||||
assert('String#chop', '15.2.10.5.11') do
|
||||
a = ''.chop
|
||||
b = 'あいう'.chop
|
||||
c = "あ\nい".chop.chop
|
||||
|
||||
assert_equal '', a
|
||||
assert_equal 'あい', b
|
||||
assert_equal 'あ', c
|
||||
end if UTF8STRING
|
||||
|
||||
assert('String#chop!', '15.2.10.5.12') do
|
||||
a = ''
|
||||
b = 'abc'
|
||||
@@ -273,6 +283,21 @@ assert('String#chop!', '15.2.10.5.12') do
|
||||
assert_equal b, 'ab'
|
||||
end
|
||||
|
||||
assert('String#chop!', '15.2.10.5.12') do
|
||||
a = ''
|
||||
b = "あいうえ\n"
|
||||
c = "あいうえ\n"
|
||||
|
||||
a.chop!
|
||||
b.chop!
|
||||
c.chop!
|
||||
c.chop!
|
||||
|
||||
assert_equal a, ''
|
||||
assert_equal b, 'あいうえ'
|
||||
assert_equal c, 'あいう'
|
||||
end if UTF8STRING
|
||||
|
||||
assert('String#downcase', '15.2.10.5.13') do
|
||||
a = 'ABC'.downcase
|
||||
b = 'ABC'
|
||||
|
||||
Reference in New Issue
Block a user