Exemplo n.º 1
0
VALUE
rb_enc_associate_index(VALUE obj, int idx)
{
    rb_encoding *enc;
    int oldidx, oldtermlen, termlen;

/*    enc_check_capable(obj);*/
    rb_check_frozen(obj);
    oldidx = rb_enc_get_index(obj);
    if (oldidx == idx)
	return obj;
    if (SPECIAL_CONST_P(obj)) {
	rb_raise(rb_eArgError, "cannot set encoding");
    }
    enc = must_encindex(idx);
    if (!ENC_CODERANGE_ASCIIONLY(obj) ||
	!rb_enc_asciicompat(enc)) {
	ENC_CODERANGE_CLEAR(obj);
    }
    termlen = rb_enc_mbminlen(enc);
    oldtermlen = rb_enc_mbminlen(rb_enc_from_index(oldidx));
    if (oldtermlen < termlen && RB_TYPE_P(obj, T_STRING)) {
	rb_str_fill_terminator(obj, termlen);
    }
    enc_set_index(obj, idx);
    return obj;
}
Exemplo n.º 2
0
static VALUE encoding_spec_ENC_CODERANGE_ASCIIONLY(VALUE self, VALUE obj) {
    if(ENC_CODERANGE_ASCIIONLY(obj)) {
        return Qtrue;
    } else {
        return Qfalse;
    }
}
Exemplo n.º 3
0
/*
 * Document-method: String#to_msgpack
 *
 * call-seq:
 *   string.to_msgpack(out = '') -> String
 *
 * Serializes the String into raw bytes.
 */
static VALUE MessagePack_String_to_msgpack(int argc, VALUE *argv, VALUE self)
{
	ARG_BUFFER(out, argc, argv);
#ifdef COMPAT_HAVE_ENCODING
	int enc = ENCODING_GET(self);
	if(enc != s_enc_utf8 && enc != s_enc_ascii8bit && enc != s_enc_usascii) {
		if(!ENC_CODERANGE_ASCIIONLY(self)) {
			self = rb_str_encode(self, s_enc_utf8_value, 0, Qnil);
		}
	}
#endif
	msgpack_pack_raw(out, RSTRING_LEN(self));
	msgpack_pack_raw_body(out, RSTRING_PTR(self), RSTRING_LEN(self));
	return out;
}
Exemplo n.º 4
0
Arquivo: encoding.c Projeto: 217/ruby
VALUE
rb_enc_associate_index(VALUE obj, int idx)
{
/*    enc_check_capable(obj);*/
    if (rb_enc_get_index(obj) == idx)
	return obj;
    if (SPECIAL_CONST_P(obj)) {
	rb_raise(rb_eArgError, "cannot set encoding");
    }
    if (!ENC_CODERANGE_ASCIIONLY(obj) ||
	!rb_enc_asciicompat(rb_enc_from_index(idx))) {
	ENC_CODERANGE_CLEAR(obj);
    }
    rb_enc_set_index(obj, idx);
    return obj;
}