#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #define NEED_newCONSTSUB #define NEED_newRV_noinc #define NEED_sv_2pv_nolen #include "ppport.h" #include "migemo.h" static void init_constants() { HV *stash; stash = gv_stashpv("Text::Migemo", 1); newCONSTSUB(stash, "MIGEMO_DICTID_MIGEMO", newSViv(MIGEMO_DICTID_MIGEMO)); newCONSTSUB(stash, "MIGEMO_DICTID_ROMA2HIRA", newSViv(MIGEMO_DICTID_ROMA2HIRA)); newCONSTSUB(stash, "MIGEMO_DICTID_HIRA2KATA", newSViv(MIGEMO_DICTID_HIRA2KATA)); newCONSTSUB(stash, "MIGEMO_DICTID_HAN2ZEN", newSViv(MIGEMO_DICTID_HAN2ZEN)); newCONSTSUB(stash, "MIGEMO_DICTID_INVALID", newSViv(MIGEMO_DICTID_INVALID)); newCONSTSUB(stash, "MIGEMO_OPINDEX_OR", newSViv(MIGEMO_OPINDEX_OR)); newCONSTSUB(stash, "MIGEMO_OPINDEX_NEST_IN", newSViv(MIGEMO_OPINDEX_NEST_IN)); newCONSTSUB(stash, "MIGEMO_OPINDEX_NEST_OUT", newSViv(MIGEMO_OPINDEX_NEST_OUT)); newCONSTSUB(stash, "MIGEMO_OPINDEX_SELECT_IN", newSViv(MIGEMO_OPINDEX_SELECT_IN)); newCONSTSUB(stash, "MIGEMO_OPINDEX_SELECT_OUT", newSViv(MIGEMO_OPINDEX_SELECT_OUT)); newCONSTSUB(stash, "MIGEMO_OPINDEX_NEWLINE", newSViv(MIGEMO_OPINDEX_NEWLINE)); } MODULE = Text::Migemo PACKAGE = Text::Migemo PROTOTYPES: ENABLE BOOT: init_constants(); SV * new(class, dict = NULL) SV *class; char *dict; PREINIT: SV *sv; migemo *m; CODE: m = migemo_open(dict); if (m == NULL) { croak("cannot create Migemo object."); } sv = newSViv(PTR2IV(m)); sv = newRV_noinc(sv); sv_bless(sv, gv_stashpv(SvPV_nolen(class), 1)); RETVAL = sv; OUTPUT: RETVAL SV * load(self, dict_id, dict) SV *self; int dict_id; char *dict; PREINIT: migemo *m; int ret; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); ret = migemo_load(m, dict_id, dict); if (ret == MIGEMO_DICTID_INVALID) { croak("cannot load dictionary file."); } RETVAL = newSViv(ret); OUTPUT: RETVAL SV * query(self, query) SV *self; unsigned char *query; PREINIT: migemo *m; unsigned char *ret; SV *sv; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); ret = migemo_query(m, query); sv = newSVpv(ret, 0); migemo_release(m, ret); RETVAL = sv; OUTPUT: RETVAL SV * is_enable(self) SV *self; PREINIT: migemo *m; int ret; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); ret = migemo_is_enable(m); RETVAL = newSViv(ret); OUTPUT: RETVAL SV* set_operator(self, index, op) SV *self; int index; unsigned char *op; PREINIT: migemo *m; int ret; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); ret = migemo_set_operator(m, index, op); if (!ret) { croak("invalid arguments."); } RETVAL = newSViv(ret); OUTPUT: RETVAL SV* get_operator(self, index) SV *self; int index; PREINIT: migemo *m; const unsigned char *ret; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); ret = migemo_get_operator(m, index); if (ret == NULL) { croak("invalid arguments."); } RETVAL = newSVpv(ret , 0); OUTPUT: RETVAL void DESTROY(self) SV *self; PREINIT: migemo *m; CODE: m = INT2PTR(migemo *, SvIV(SvRV(self))); migemo_close(m);