Revision: 3826 http://trac.macosforge.org/projects/ruby/changeset/3826 Author: lsansonetti@apple.com Date: 2010-03-18 22:13:51 -0700 (Thu, 18 Mar 2010) Log Message: ----------- added support in #<< for codepoints (only if the receiver is UTF-8 for now) Modified Paths: -------------- MacRuby/trunk/string.c Modified: MacRuby/trunk/string.c =================================================================== --- MacRuby/trunk/string.c 2010-03-19 05:13:17 UTC (rev 3825) +++ MacRuby/trunk/string.c 2010-03-19 05:13:51 UTC (rev 3826) @@ -2104,9 +2104,32 @@ return self; } - // TODO: handle codepoint + if (RSTR(self)->encoding == rb_encodings[ENCODING_UTF8]) { + const int bytelen = U8_LENGTH(codepoint); + if (bytelen <= 0) { + goto out_of_range; + } + uint8_t *buf = (uint8_t *)malloc(bytelen); + int offset = 0; + UBool error = false; + U8_APPEND(buf, offset, bytelen, codepoint, error); + if (error) { + free(buf); + goto out_of_range; + } + str_concat_bytes(RSTR(self), (const char *)buf, bytelen); + free(buf); + } + else { + rb_raise(rb_eArgError, + "receiver encoding `%s' not supported for codepoint insertion", + RSTRING_PTR(rb_inspect((VALUE)RSTR(self)->encoding))); + } return self; + +out_of_range: + rb_raise(rb_eArgError, "codepoint %ld out of range", codepoint); } /*
participants (1)
-
source_changes@macosforge.org