Class: OpenCC::Converter

Inherits:
Object
  • Object
show all
Defined in:
ext/opencc/opencc.c

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'ext/opencc/opencc.c', line 39

static VALUE opencc_converter_t_initialize(int argc, VALUE* argv, VALUE self) {
  opencc_converter_t *ptr;
  const char *cfg = NULL;

  if (argv[0] != Qnil) {
    switch (TYPE(argv[0])) {
      case T_SYMBOL:
        cfg = RSTRING_PTR(rb_sym_to_s(argv[0]));
        break;
      case T_STRING:
        cfg = RSTRING_PTR(argv[0]);
        break;
    }
  }

  TypedData_Get_Struct(self, opencc_converter_t, &opencc_converter_data_type, ptr);

  ptr->opencc = opencc_open(cfg);

  // On error the return value will be (opencc_t) -1.
  if (ptr->opencc == (opencc_t) - 1) {
    free(ptr);
    rb_raise(rb_eException, "%s", "(opencc_open) failed to allocate instance of opencc");
  }
  return self;
}

Instance Method Details

#closeObject



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

static VALUE opencc_converter_t_close(VALUE self) {
  opencc_converter_t *ptr;
  TypedData_Get_Struct(self, opencc_converter_t, &opencc_converter_data_type, ptr);

  if (ptr->opencc != NULL && opencc_close(ptr->opencc) == 0) {
    ptr->opencc = NULL;
    return Qtrue;
  } else {
    return Qfalse;
  }
}

#convert(input) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'ext/opencc/opencc.c', line 66

static VALUE opencc_converter_t_convert(VALUE self, VALUE input) {
  opencc_converter_t *ptr;
  TypedData_Get_Struct(self, opencc_converter_t, &opencc_converter_data_type, ptr);

  if (ptr->opencc != NULL) {
    char * buff = opencc_convert_utf8(ptr->opencc, RSTRING_PTR(input), RSTRING_LEN(input));
    VALUE result = rb_utf8_str_new_cstr(buff);
    opencc_convert_utf8_free(buff);
    return result;
  } else {
    rb_warn("%s", "opencc has been closed");
    return Qnil;
  }
}