Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private IRubyObject upcase_bang(ThreadContext context, int flags) {
- modifyAndKeepCodeRange();
- Encoding enc = checkDummyEncoding();
- if (((flags & Config.CASE_ASCII_ONLY) != 0 && (enc.isUTF8() || enc.maxLength() == 1)) ||
- (flags & Config.CASE_FOLD_TURKISH_AZERI) == 0 && getCodeRange() == CR_7BIT) {
- int s = value.getBegin();
- int end = s + value.getRealSize();
- byte[]bytes = value.getUnsafeBytes();
- while (s < end) {
- int c = bytes[s] & 0xff;
- if (Encoding.isAscii(c) && 'a' <= c && c <= 'z') {
- bytes[s] = (byte)('A' + (c - 'a'));
- flags |= Config.CASE_MODIFIED;
- }
- s++;
- }
- } else {
- flags = caseMap(context.runtime, flags, enc);
- if ((flags & Config.CASE_MODIFIED) != 0) clearCodeRange();
- }
- return ((flags & Config.CASE_MODIFIED) != 0) ? this : context.nil;
- }
- rb_str_upcase_bang(int argc, VALUE *argv, VALUE str)
- {
- rb_encoding *enc;
- OnigCaseFoldType flags = ONIGENC_CASE_UPCASE;
- flags = check_case_options(argc, argv, flags);
- str_modify_keep_cr(str);
- enc = STR_ENC_GET(str);
- rb_str_check_dummy_enc(enc);
- if (((flags&ONIGENC_CASE_ASCII_ONLY) && (enc==rb_utf8_encoding() || rb_enc_mbmaxlen(enc)==1))
- || (!(flags&ONIGENC_CASE_FOLD_TURKISH_AZERI) && ENC_CODERANGE(str)==ENC_CODERANGE_7BIT)) {
- char *s = RSTRING_PTR(str), *send = RSTRING_END(str);
- while (s < send) {
- unsigned int c = *(unsigned char*)s;
- if (rb_enc_isascii(c, enc) && 'a' <= c && c <= 'z') {
- *s = 'A' + (c - 'a');
- flags |= ONIGENC_CASE_MODIFIED;
- }
- s++;
- }
- }
- else if (flags&ONIGENC_CASE_ASCII_ONLY)
- rb_str_ascii_casemap(str, &flags, enc);
- else
- str_shared_replace(str, rb_str_casemap(str, &flags, enc));
- if (ONIGENC_CASE_MODIFIED&flags) return str;
- return Qnil;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement