static PyObject * py_detect (PyObject * self, PyObject * args) { // {{{ PyObject * err = NULL; char * text; size_t inlen; int argc; DetectObj * obj; PyObject * dict; PyObject * prop; if ( ! PyArg_ParseTuple (args, "s#|O", &text, &inlen, &err) ) return NULL; argc = PyTuple_Size (args); if ( err != NULL ) { if ( ! PyList_Check (err) ) { PyErr_SetString (ErrorObject, "3th argument is must PyLis"); return NULL; } } if ( (obj = detect_obj_init ()) == NULL ) { if ( argc > 1 ) { PyObject * value = PyString_FromString ("Memory allocation failed"); PyList_Append (err, value); Py_DECREF (value); } return Py_None; } #ifdef CHARDET_BINARY_SAFE if ( detect_r (text, inlen, &obj) == CHARDET_OUT_OF_MEMORY ) #else if ( detect (text, &obj) == CHARDET_OUT_OF_MEMORY ) #endif { if ( argc > 1 ) { PyObject * value = PyString_FromString ("On handle processing, occured out of memory"); PyList_Append (err, value); Py_DECREF (value); } detect_obj_free (&obj); return Py_None; } dict = PyDict_New (); prop = Py_BuildValue ("s", obj->encoding); PyDict_SetItemString (dict, "encoding", prop); Py_DECREF (prop); prop = Py_BuildValue ("f", obj->confidence); PyDict_SetItemString (dict, "confidence", prop); Py_DECREF (prop); detect_obj_free (&obj); return dict; } // }}}
int main (void) { DetectObj *obj; int i; char *str[] = { "안녕", "안녕하세요", "안녕하세요 정말?", "그래 이정도면 판단 될까?", "좀더 길게 적어 볼까 얼마나 길게 해야!", "그래 그래 좀 더 길게 적어 보자 더 길게 적어 보야야 겠지...", "12345 abcde" }; short arrayNum; arrayNum = sizeof (str) / sizeof (str[0]); for ( i=0; i<arrayNum; i++ ) { obj = detect_obj_init (); if ( obj == NULL ) { fprintf (stderr, "On attemped \"%s\", memory allocation failed\n", str[i]); continue; } #ifdef CHARDET_BINARY_SAFE if ( detect_r (str[i], strlen (str[i]), &obj) == CHARDET_OUT_OF_MEMORY ) #else if ( detect (str[i], &obj) == CHARDET_OUT_OF_MEMORY ) #endif { fprintf (stderr, "On handle processing, occured out of memory\n"); return CHARDET_OUT_OF_MEMORY; } printf ("## %s : %s : %f\n", str[i], obj->encoding, obj->confidence); detect_obj_free (&obj); } return 0; }
CharsetDetector::~CharsetDetector() { detect_obj_free(&d->obj); delete d; }