Module: Glib

Defined in:
ext/glib/glib.c

Class Method Summary collapse

Class Method Details

.utf8_downcase(string) ⇒ Object

Returns the string in lowercase characters if they are are available for the supplied characters.

Glib.utf8_downcase('ORGANISÉE') #=> organisée


59
60
61
62
63
64
65
66
67
68
69
70
# File 'ext/glib/glib.c', line 59

static VALUE utf8_downcase(VALUE self, VALUE string)
{
  VALUE result;
  gchar *temp;

  Check_Type(string, T_STRING);
  temp = g_utf8_strdown(StringValuePtr(string), RSTRING_LEN(string));
  result = rb_str_new2(temp);
  free(temp);

  return result;
}

.utf_normalize(string, form) ⇒ Object

Returns the normalized form of the string. See www.unicode.org/reports/tr15/tr15-29.html for more information about normalization.

form can be one of the following: :c, :kc, :d, or :kd.

decomposed = [101, 769].pack('U*')
composed = Glib.utf8_normalize(decomposed, :kc)
composed.unpack('U*') #=> [233]


107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'ext/glib/glib.c', line 107

static VALUE utf8_normalize(VALUE self, VALUE string, VALUE form)
{
  VALUE result;
  gchar *temp;
  GNormalizeMode mode;

  Check_Type(string, T_STRING);
  Check_Type(form, T_SYMBOL);

  if (ID2SYM(rb_intern("d")) == form) {
    mode = G_NORMALIZE_NFD;
  } else if (ID2SYM(rb_intern("c")) == form) {
    mode = G_NORMALIZE_NFC;
  } else if (ID2SYM(rb_intern("kd")) == form) {
    mode = G_NORMALIZE_NFKD;
  } else if (ID2SYM(rb_intern("kc")) == form) {
    mode = G_NORMALIZE_NFKC;
  } else {
    rb_raise(rb_eArgError, "%s is not a valid normalization form, options are: :d, :kd, :c, or :kc", RSTRING_PTR(rb_inspect(form)));
  }

  temp = g_utf8_normalize(StringValuePtr(string), RSTRING_LEN(string), mode);
  result = rb_str_new2(temp);
  free(temp);

  return result;
}

.utf8_reverse(string) ⇒ Object

Returns a string with the characters in reverse order.

Glib.utf8_reverse('Comment ça va?') #=> av aç tnemmoC


80
81
82
83
84
85
86
87
88
89
90
91
# File 'ext/glib/glib.c', line 80

static VALUE utf8_reverse(VALUE self, VALUE string)
{
  VALUE result;
  gchar *temp;

  Check_Type(string, T_STRING);
  temp = g_utf8_strreverse(StringValuePtr(string), RSTRING_LEN(string));
  result = rb_str_new2(temp);
  free(temp);

  return result;
}

.utf8_size(string) ⇒ Object

Returns the length of the string expressed in codepoints.

Glib.utf8_size('A ehm…, word.') #=> 13


20
21
22
23
24
25
26
27
28
# File 'ext/glib/glib.c', line 20

static VALUE utf8_size(VALUE self, VALUE string)
{
  VALUE result;

  Check_Type(string, T_STRING);
  result = ULONG2NUM(g_utf8_strlen(StringValuePtr(string), RSTRING_LEN(string)));

  return result;
}

.utf8_upcase(string) ⇒ Object

Returns the string in capitals if they are are available for the supplied characters.

Glib.utf8_upcase('Sluß') #=> SLUSS


38
39
40
41
42
43
44
45
46
47
48
49
# File 'ext/glib/glib.c', line 38

static VALUE utf8_upcase(VALUE self, VALUE string)
{
  VALUE result;
  gchar *temp;

  Check_Type(string, T_STRING);
  temp = g_utf8_strup(StringValuePtr(string), RSTRING_LEN(string));
  result = rb_str_new2(temp);
  free(temp);

  return result;
}