Module: Pango
- Defined in:
- lib/pango.rb,
ext/pango/rbpango.c
Defined Under Namespace
Modules: Gravity Classes: AttrBool, AttrColor, AttrFloat, AttrInt, AttrList, AttrString, Attribute
Constant Summary collapse
- LOG_DOMAIN =
"Pango"
- BUILD_VERSION =
rb_ary_new3(3, INT2FIX(PANGO_MAJOR_VERSION), INT2FIX(PANGO_MINOR_VERSION), INT2FIX(PANGO_MICRO_VERSION))
- SCALE =
INT2FIX(PANGO_SCALE)
Class Method Summary collapse
- .break(text, analysis) ⇒ Object
- .cairo_available? ⇒ Boolean
- .find_base_dir(text) ⇒ Object
- .find_paragraph_boundary(text) ⇒ Object
- .get_log_attrs(text, level, language) ⇒ Object
-
.parse_markup(*args) ⇒ Object
This method is from rbpangoattribute.c.
- .pixels(pixels) ⇒ Object
-
.reorder_items(logical_items) ⇒ Object
Rendering.
-
.shape(text, analysis) ⇒ Object
Don’t need to implement this.
- .unichar_direction(ch) ⇒ Object
Class Method Details
.break(text, analysis) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'ext/pango/rbpangomain.c', line 53
static VALUE
rpango_break(VALUE self, VALUE text, VALUE analysis)
{
gint i, len;
glong attrs_len;
PangoLogAttr *attrs;
const gchar *gtext;
VALUE ret;
gtext = StringValuePtr(text);
len = RSTRING_LEN(text);
attrs_len = g_utf8_strlen(gtext, (gssize)len) + 1l;
attrs = g_new0(PangoLogAttr, attrs_len);
pango_break(gtext, len,
NIL_P(analysis) ? NULL : RVAL2BOXED(analysis, PANGO_TYPE_ANALYSIS),
attrs, attrs_len);
ret = rb_ary_new();
for (i = 0; i < attrs_len; i++){
rb_ary_push(ret, BOXED2RVAL(&attrs[i], PANGO_TYPE_LOG_ATTR));
}
g_free(attrs);
return ret;
}
|
.cairo_available? ⇒ Boolean
152 153 154 155 156 157 158 159 160 |
# File 'ext/pango/rbpangocairo.c', line 152
static VALUE
cairo_available_p(VALUE self)
{
#if CAIRO_AVAILABLE
return Qtrue;
#else
return Qfalse;
#endif
}
|
.find_base_dir(text) ⇒ Object
44 45 46 47 48 49 50 |
# File 'ext/pango/rbpangomain.c', line 44
static VALUE
rpango_find_base_dir(VALUE self, VALUE text)
{
StringValue(text);
return GENUM2RVAL(pango_find_base_dir(RSTRING_PTR(text), RSTRING_LEN(text)),
PANGO_TYPE_DIRECTION);
}
|
.find_paragraph_boundary(text) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'ext/pango/rbpangomain.c', line 105
static VALUE
rpango_find_paragraph_boundary(VALUE self, VALUE text)
{
gint paragraph_delimiter_index, next_paragraph_start;
StringValue(text);
pango_find_paragraph_boundary(RSTRING_PTR(text), RSTRING_LEN(text),
¶graph_delimiter_index,
&next_paragraph_start);
return rb_ary_new3(2, INT2NUM(paragraph_delimiter_index),
INT2NUM(next_paragraph_start));
}
|
.get_log_attrs(text, level, language) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'ext/pango/rbpangomain.c', line 79
static VALUE
rpango_get_log_attrs(VALUE self, VALUE text, VALUE level, VALUE language)
{
gint i, len;
glong attrs_len;
PangoLogAttr *attrs;
const gchar *gtext;
VALUE ret;
gtext = StringValuePtr(text);
len = RSTRING_LEN(text);
attrs_len = g_utf8_strlen(gtext, (gssize)len) + 1l;
attrs = g_new0(PangoLogAttr, attrs_len);
pango_get_log_attrs(gtext, len, NUM2INT(level),
RVAL2BOXED(language, PANGO_TYPE_LANGUAGE),
attrs, attrs_len);
ret = rb_ary_new();
for (i = 0; i < attrs_len; i++){
rb_ary_push(ret, BOXED2RVAL(&attrs[i], PANGO_TYPE_LOG_ATTR));
}
g_free(attrs);
return ret;
}
|
.parse_markup(*args) ⇒ Object
This method is from rbpangoattribute.c
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'ext/pango/rbpangomain.c', line 140
static VALUE
rpango_parse_markup(int argc, VALUE *argv, VALUE self)
{
VALUE markup_text, accel_marker;
PangoAttrList *pattr_list;
gchar* gtext;
gunichar accel_char;
GError *error = NULL;
gboolean ret;
char c;
VALUE text = Qnil;
VALUE attr_list = Qnil;
rb_scan_args(argc, argv, "11", &markup_text, &accel_marker);
if (NIL_P(markup_text)) rb_raise(rb_eRuntimeError, "1st argument can't accept nil");
StringValue(markup_text);
ret = pango_parse_markup(RSTRING_PTR(markup_text),
RSTRING_LEN(markup_text),
NIL_P(accel_marker) ? 0 : NUM2CHR(accel_marker),
&pattr_list, >ext, &accel_char, &error);
if (!ret) RAISE_GERROR(error);
if (pattr_list){
attr_list = BOXED2RVAL(pattr_list, PANGO_TYPE_ATTR_LIST);
pango_attr_list_unref(pattr_list);
}
c = (char)accel_char;
if (text){
text = CSTR2RVAL(gtext);
g_free(gtext);
}
return rb_ary_new3(3, attr_list, text,
accel_char ? rb_str_new(&c, 1) : Qnil);
}
|
.pixels(pixels) ⇒ Object
179 180 181 182 183 |
# File 'ext/pango/rbpangomain.c', line 179
static VALUE
rpango_pixels(VALUE self, VALUE pixels)
{
return rb_float_new(PANGO_PIXELS(NUM2DBL(pixels)));
}
|
.reorder_items(logical_items) ⇒ Object
Rendering
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'ext/pango/rbpangomain.c', line 18
static VALUE
rpango_reorder_items(VALUE self, VALUE logical_items)
{
int i;
GList *glist = NULL;
GList* ret;
Check_Type(logical_items, T_ARRAY);
for (i = 0; i < RARRAY_LEN(logical_items); i++){
glist = g_list_append(glist, RVAL2BOXED(RARRAY_PTR(logical_items)[i], PANGO_TYPE_ITEM));
}
ret = pango_reorder_items(glist);
g_list_free(glist);
return GLIST2ARY2(ret, PANGO_TYPE_ITEM);
}
|
.shape(text, analysis) ⇒ Object
Don’t need to implement this. Use pango_break instead. void pango_default_break (const gchar *text,
int length,
PangoAnalysis *analysis,
PangoLogAttr *attrs,
int attrs_len);
127 128 129 130 131 132 133 134 135 136 137 |
# File 'ext/pango/rbpangomain.c', line 127
static VALUE
rpango_shape(VALUE self, VALUE text, VALUE analysis)
{
VALUE ret;
PangoGlyphString* glyphs = pango_glyph_string_new();
StringValue(text);
pango_shape(RSTRING_PTR(text), RSTRING_LEN(text), RVAL2BOXED(analysis, PANGO_TYPE_ANALYSIS), glyphs);
ret = BOXED2RVAL(glyphs, PANGO_TYPE_GLYPH_STRING);
pango_glyph_string_free (glyphs);
return ret;
}
|
.unichar_direction(ch) ⇒ Object
38 39 40 41 42 |
# File 'ext/pango/rbpangomain.c', line 38
static VALUE
rpango_unichar_direction(VALUE self, VALUE ch)
{
return GENUM2RVAL(pango_unichar_direction(NUM2UINT(ch)), PANGO_TYPE_DIRECTION);
}
|