VALUE string_spec_rb_str_ptr_assign_call(VALUE self, VALUE str) { char *ptr = rb_str_ptr(str); ptr[1] = 'x'; rb_str_concat(str, rb_str_new2("d")); return str; }
VALUE string_spec_rb_str_ptr_assign_funcall(VALUE self, VALUE str) { char *ptr = rb_str_ptr(str); ptr[1] = 'x'; rb_funcall(str, rb_intern("<<"), 1, rb_str_new2("e")); return str; }
VALUE string_spec_rb_str_ptr_iterate(VALUE self, VALUE str) { int i; char* ptr; ptr = rb_str_ptr(str); for(i = 0; i < RSTRING_LEN(str); i++) { rb_yield(INT2FIX(ptr[i])); } return Qnil; }
VALUE string_spec_rb_str_ptr_assign(VALUE self, VALUE str, VALUE chr) { int i; char c; char* ptr; ptr = rb_str_ptr(str); c = FIX2INT(chr); for(i = 0; i < RSTRING_LEN(str); i++) { ptr[i] = c; } return Qnil; }
int ox_sax_collapse_special(SaxDrive dr, char *str, int line, int col) { char *s = str; char *b = str; while ('\0' != *s) { if ('&' == *s) { int c = 0; char *end; s++; if ('#' == *s) { uint64_t u = 0; char x; s++; if ('x' == *s || 'X' == *s) { x = *s; s++; end = read_hex_uint64(s, &u); } else { x = '\0'; end = read_10_uint64(s, &u); } if (0 == end) { ox_sax_drive_error(dr, NO_TERM "special character does not end with a semicolon"); *b++ = '&'; *b++ = '#'; if ('\0' != x) { *b++ = x; } continue; } if (u <= 0x000000000000007FULL) { *b++ = (char)u; #if HAS_ENCODING_SUPPORT } else if (ox_utf8_encoding == dr->encoding) { b = ox_ucs_to_utf8_chars(b, u); } else if (0 == dr->encoding) { dr->encoding = ox_utf8_encoding; b = ox_ucs_to_utf8_chars(b, u); #elif HAS_PRIVATE_ENCODING } else if (ox_utf8_encoding == dr->encoding || 0 == strcasecmp(rb_str_ptr(rb_String(ox_utf8_encoding)), rb_str_ptr(rb_String(dr->encoding)))) { b = ox_ucs_to_utf8_chars(b, u); } else if (Qnil == dr->encoding) { dr->encoding = ox_utf8_encoding; b = ox_ucs_to_utf8_chars(b, u); #else } else if (0 == dr->encoding) { dr->encoding = UTF8_STR; b = ox_ucs_to_utf8_chars(b, u); } else if (0 == strcasecmp(UTF8_STR, dr->encoding)) { b = ox_ucs_to_utf8_chars(b, u); #endif } else { b = ox_ucs_to_utf8_chars(b, u); /* ox_sax_drive_error(dr, NO_TERM "Invalid encoding, need UTF-8 encoding to parse &#nnnn; character sequences."); *b++ = '&'; *b++ = '#'; if ('\0' != x) { *b++ = x; } continue; */ } s = end + 1; continue; } else if (0 == strncasecmp(s, "lt;", 3)) { c = '<'; s += 3; col += 3; } else if (0 == strncasecmp(s, "gt;", 3)) { c = '>'; s += 3; col += 3; } else if (0 == strncasecmp(s, "amp;", 4)) { c = '&'; s += 4; col += 4; } else if (0 == strncasecmp(s, "quot;", 5)) { c = '"'; s += 5; col += 5; } else if (0 == strncasecmp(s, "apos;", 5)) { c = '\''; s += 5; } else { ox_sax_drive_error_at(dr, NO_TERM "special character does not end with a semicolon", line, col); c = '&'; } *b++ = (char)c; col++; } else { if ('\n' == *s) { line++; col = 0; } col++; *b++ = *s++; } } *b = '\0'; return 0; }