static VALUE rglyph_get_logical_widgths(VALUE self, VALUE text, VALUE embedding_level) { int* logical_widths = NULL; int len, array_len, i; char* gtext; VALUE ret; gtext = RVAL2CSTR(text); len = RSTRING_LEN(text); array_len = g_utf8_strlen(gtext, len); logical_widths = g_new(PangoGlyphUnit, array_len); pango_glyph_string_get_logical_widths(_SELF(self), gtext, len, NUM2INT(embedding_level), logical_widths); ret = rb_ary_new(); for (i = 0; i < array_len; i++){ rb_ary_push(ret, INT2NUM(logical_widths[i])); } return ret; }
static VALUE rg_get_logical_widths(VALUE self, VALUE rbtext, VALUE rbembedding_level) { PangoGlyphString *glyphs = _SELF(self); const char *text = RVAL2CSTR(rbtext); long length = RSTRING_LEN(rbtext); int embedding_level = NUM2INT(rbembedding_level); glong n = g_utf8_strlen(text, length); int *logical_widths = g_new(int, n); pango_glyph_string_get_logical_widths(glyphs, text, length, embedding_level, logical_widths); return GINTS2RVAL_FREE(logical_widths, n); }