Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. private IRubyObject upcase_bang(ThreadContext context, int flags) {
  2. modifyAndKeepCodeRange();
  3. Encoding enc = checkDummyEncoding();
  4. if (((flags & Config.CASE_ASCII_ONLY) != 0 && (enc.isUTF8() || enc.maxLength() == 1)) ||
  5. (flags & Config.CASE_FOLD_TURKISH_AZERI) == 0 && getCodeRange() == CR_7BIT) {
  6. int s = value.getBegin();
  7. int end = s + value.getRealSize();
  8. byte[]bytes = value.getUnsafeBytes();
  9. while (s < end) {
  10. int c = bytes[s] & 0xff;
  11. if (Encoding.isAscii(c) && 'a' <= c && c <= 'z') {
  12. bytes[s] = (byte)('A' + (c - 'a'));
  13. flags |= Config.CASE_MODIFIED;
  14. }
  15. s++;
  16. }
  17. } else {
  18. flags = caseMap(context.runtime, flags, enc);
  19. if ((flags & Config.CASE_MODIFIED) != 0) clearCodeRange();
  20. }
  21.  
  22. return ((flags & Config.CASE_MODIFIED) != 0) ? this : context.nil;
  23. }
  24.  
  25. rb_str_upcase_bang(int argc, VALUE *argv, VALUE str)
  26. {
  27. rb_encoding *enc;
  28. OnigCaseFoldType flags = ONIGENC_CASE_UPCASE;
  29.  
  30. flags = check_case_options(argc, argv, flags);
  31. str_modify_keep_cr(str);
  32. enc = STR_ENC_GET(str);
  33. rb_str_check_dummy_enc(enc);
  34. if (((flags&ONIGENC_CASE_ASCII_ONLY) && (enc==rb_utf8_encoding() || rb_enc_mbmaxlen(enc)==1))
  35. || (!(flags&ONIGENC_CASE_FOLD_TURKISH_AZERI) && ENC_CODERANGE(str)==ENC_CODERANGE_7BIT)) {
  36. char *s = RSTRING_PTR(str), *send = RSTRING_END(str);
  37.  
  38. while (s < send) {
  39. unsigned int c = *(unsigned char*)s;
  40.  
  41. if (rb_enc_isascii(c, enc) && 'a' <= c && c <= 'z') {
  42. *s = 'A' + (c - 'a');
  43. flags |= ONIGENC_CASE_MODIFIED;
  44. }
  45. s++;
  46. }
  47. }
  48. else if (flags&ONIGENC_CASE_ASCII_ONLY)
  49. rb_str_ascii_casemap(str, &flags, enc);
  50. else
  51. str_shared_replace(str, rb_str_casemap(str, &flags, enc));
  52.  
  53. if (ONIGENC_CASE_MODIFIED&flags) return str;
  54. return Qnil;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement