class String
Public Instance Methods
fast_xs()
click to toggle source
escapes strings for XML The double-quote (“) character is translated to ”"“
static VALUE fast_xs(VALUE self) { long i; VALUE array; char *c; size_t s_len; VALUE *tmp; VALUE rv; array = rb_rescue(unpack_utf8, self, unpack_uchar, self); for (tmp = RARRAY_PTR(array), s_len = i = RARRAY_LEN(array); --i >= 0; tmp++) { int n = NUM2INT(*tmp); if (likely(n < 128)) { if (unlikely(n == '"')) s_len += (sizeof(""") - 2); if (unlikely(n == '&')) s_len += (sizeof("&") - 2); if (unlikely(n == '>' || n == '<')) s_len += (sizeof(">") - 2); continue; } CP_1252_ESCAPE(n); if (VALID_VALUE(n)) s_len += bytes_for(n) - 1; } rv = rb_str_new(NULL, s_len); ASSOCIATE_INDEX(rv, rb_default_external_encoding()); c = RSTRING_PTR(rv); for (tmp = RARRAY_PTR(array), i = RARRAY_LEN(array); --i >= 0; tmp++) c += escape(c, NUM2INT(*tmp)); return rv; }