#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include #if PERL_REVISION == 5 && PERL_VERSION < 7 #define sv_setref_uv(rv, classname, uv) sv_setuv(newSVrv(rv, classname), uv) #endif typedef struct ChuInfo * Chu; typedef struct ChunkInfo * Chunk; typedef struct TsiInfo * Tsi; typedef struct TsiYinInfo * TsiYin; typedef struct TsiDB * TsiDB; typedef struct TsiYinDB * TsiYinDB; typedef Yin * YinList; static TsiDB TSIDB; /* last opened TsiDB */ static TsiYinDB TSIYINDB; /* last opened TsiDB */ MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE PREFIX=tabe TsiDB tabeTsiDBOpen(type, db_name, flags) int type const char * db_name int flags int tabeTsiInfoLookupPossibleTsiYin(tsidb, tsi) TsiDB tsidb Tsi tsi TsiYinDB tabeTsiYinDBOpen(type, db_name, flags) int type const char * db_name int flags int tabeChuInfoToChunkInfo(chu) Chu chu int tabeChunkSegmentationSimplex(tsidb, chunk) TsiDB tsidb Chunk chunk int tabeChunkSegmentationComplex(tsidb, chunk) TsiDB tsidb Chunk chunk int tabeChunkSegmentationBackward(tsidb, chunk) TsiDB tsidb Chunk chunk int tabeTsiInfoLookupZhiYin(tsidb, z) TsiDB tsidb Tsi z ZhiStr tabeYinLookupZhiList(yin) Yin yin ZuYinSymbolSequence tabeYinToZuYinSymbolSequence(yin) Yin yin Yin tabeZuYinSymbolSequenceToYin(str) ZuYinSymbolSequence str Zhi tabeZuYinIndexToZuYinSymbol(idx) ZuYinIndex idx ZuYinIndex tabeZuYinSymbolToZuYinIndex(sym) ZuYinSymbol sym ZuYinIndex tabeZozyKeyToZuYinIndex(key) int key int tabeZhiIsBig5Code(zhi) Zhi zhi ZhiCode tabeZhiToZhiCode(zhi) Zhi zhi Zhi tabeZhiCodeToZhi(code) ZhiCode code int tabeZhiCodeToPackedBig5Code(code) ZhiCode code unsigned long int tabeZhiCodeLookupRefCount(code) ZhiCode code MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::Chu Chu new(package, chu, num_chunk=-1) const char * package ZhiStr chu int num_chunk CODE: New(1, RETVAL, 1, struct ChuInfo); RETVAL->chu = chu; RETVAL->num_chunk = num_chunk; RETVAL->chunk = NULL; OUTPUT: RETVAL ZhiStr chu(chu) Chu chu CODE: RETVAL = chu->chu; OUTPUT: RETVAL int num_chunk(chu) Chu chu CODE: RETVAL = chu->num_chunk; OUTPUT: RETVAL void chunk(chu, i=0, tmp=NULL) Chu chu unsigned long int i SV* tmp PPCODE: if (chu->num_chunk <= 0) XSRETURN_EMPTY; EXTEND(SP, chu->num_chunk); for (; i < chu->num_chunk; i++) { tmp = newSV(0); sv_setref_pv(tmp, "Lingua::ZH::TaBE::Chunk", &(chu->chunk[i])); PUSHs(tmp); } int ToChunkInfo(chu) Chu chu CODE: RETVAL = tabeChuInfoToChunkInfo(chu); OUTPUT: RETVAL MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::Chunk Chunk new(package, chunk, num_tsi=-1) const char * package ZhiStr chunk int num_tsi CODE: New(0, RETVAL, 1, struct ChunkInfo); RETVAL->chunk = chunk; RETVAL->num_tsi = num_tsi; RETVAL->tsi = NULL; OUTPUT: RETVAL ZhiStr chunk(chunk) Chunk chunk CODE: RETVAL = chunk->chunk; OUTPUT: RETVAL int num_tsi(chunk) Chunk chunk CODE: RETVAL = chunk->num_tsi; OUTPUT: RETVAL void tsi(chunk, i=0, tmp=NULL) Chunk chunk unsigned long int i SV* tmp PPCODE: if (chunk->num_tsi <= 0) XSRETURN_EMPTY; EXTEND(SP, chunk->num_tsi); for (; i < chunk->num_tsi; i++) { tmp = newSV(0); sv_setref_pv(tmp, "Lingua::ZH::TaBE::Tsi", &(chunk->tsi[i])); PUSHs(tmp); } int SegmentationSimplex(chunk, tsidb=TSIDB) Chunk chunk TsiDB tsidb CODE: RETVAL = tabeChunkSegmentationSimplex(tsidb, chunk); OUTPUT: RETVAL int SegmentationComplex(chunk, tsidb=TSIDB) Chunk chunk TsiDB tsidb CODE: RETVAL = tabeChunkSegmentationComplex(tsidb, chunk); OUTPUT: RETVAL int SegmentationBackward(chunk, tsidb=TSIDB) Chunk chunk TsiDB tsidb CODE: RETVAL = tabeChunkSegmentationBackward(tsidb, chunk); OUTPUT: RETVAL MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::Tsi Tsi new(package, tsi, refcount=0, yinnum=0) const char * package ZhiStr tsi unsigned long int refcount unsigned long int yinnum CODE: New(0, RETVAL, 1, struct TsiInfo); RETVAL->tsi = tsi; RETVAL->refcount = refcount; RETVAL->yinnum = yinnum; RETVAL->yindata = NULL; OUTPUT: RETVAL ZhiStr tsi(tsi) Tsi tsi CODE: RETVAL = tsi->tsi; OUTPUT: RETVAL unsigned long int refcount(tsi) Tsi tsi CODE: RETVAL = tsi->refcount; OUTPUT: RETVAL unsigned long int yinnum(tsi) Tsi tsi CODE: RETVAL = tsi->yinnum; OUTPUT: RETVAL void yindata(tsi, i=0, tmp=NULL) Tsi tsi unsigned long int i SV* tmp PPCODE: if (tsi->yinnum <= 0) XSRETURN_EMPTY; EXTEND(SP, tsi->yinnum); for (; i < tsi->yinnum; i++) { tmp = newSV(0); sv_setref_uv(tmp, "Lingua::ZH::TaBE::Yin", tsi->yindata[i]); PUSHs(tmp); } int LookupPossibleTsiYin(tsi, tsidb=TSIDB) Tsi tsi TsiDB tsidb CODE: RETVAL = tabeTsiInfoLookupPossibleTsiYin(tsidb, tsi); OUTPUT: RETVAL int LookupZhiYin(z, tsidb=TSIDB) Tsi z TsiDB tsidb CODE: RETVAL = tabeTsiInfoLookupZhiYin(tsidb, z); OUTPUT: RETVAL MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::TsiYin TsiYin new(package, yin, yinlen=0, tsinum=0, tsidata=NULL) const char * package YinList yin unsigned long int yinlen unsigned long int tsinum ZhiStr tsidata CODE: New(0, RETVAL, 1, struct TsiYinInfo); RETVAL->yin = yin; RETVAL->yinlen = strlen((char *)yin); RETVAL->tsinum = tsinum; RETVAL->tsidata = tsidata; OUTPUT: RETVAL unsigned long int yinlen(tsiyin) TsiYin tsiyin CODE: RETVAL = tsiyin->yinlen; OUTPUT: RETVAL SV * yin(tsiyin) TsiYin tsiyin CODE: RETVAL = newSVpvn((char *)tsiyin->yin, tsiyin->yinlen); OUTPUT: RETVAL unsigned long int tsinum(tsiyin) TsiYin tsiyin CODE: RETVAL = tsiyin->tsinum; OUTPUT: RETVAL void tsidata(tsiyin, i=0, tmp=NULL, tsi=NULL) TsiYin tsiyin unsigned long int i Tsi tsi SV * tmp PPCODE: if (tsiyin->tsinum <= 0) XSRETURN_EMPTY; EXTEND(SP, tsiyin->tsinum); for (; i < tsiyin->tsinum; i++) { New(0, tsi, 1, struct TsiInfo); strncpy( tsi->tsi, (char *)tsiyin->tsidata+((i * tsiyin->yinlen)) * 2, tsiyin->yinlen * 2 + 1 ); tsi->refcount = -1; tsi->yinnum = -1; tsi->yindata = NULL; sv_setref_pv(tmp, "Lingua::ZH::TaBE::Tsi", &(tsi)); PUSHs(tmp); } MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::TsiDB TsiDB new(package, type, db_name, flags) const char * package int type const char * db_name int flags CODE: RETVAL = TSIDB = tabeTsiDBOpen(type, db_name, flags); OUTPUT: RETVAL int type(tsidb) TsiDB tsidb CODE: RETVAL = tsidb->type; OUTPUT: RETVAL int flags(tsidb) TsiDB tsidb CODE: RETVAL = tsidb->flags; OUTPUT: RETVAL char * db_name(tsidb) TsiDB tsidb CODE: RETVAL = tsidb->db_name; OUTPUT: RETVAL void Close(tsidb) TsiDB tsidb CODE: tsidb->Close(tsidb); int RecordNumber(tsidb) TsiDB tsidb CODE: RETVAL = tsidb->RecordNumber(tsidb); OUTPUT: RETVAL int Put(tsidb, tsi) TsiDB tsidb Tsi tsi CODE: RETVAL = tsidb->Put(tsidb, tsi); OUTPUT: RETVAL int Get(tsidb, tsi) TsiDB tsidb Tsi tsi CODE: RETVAL = tsidb->Get(tsidb, tsi); OUTPUT: RETVAL int CursorSet(tsidb, tsi, set_range) TsiDB tsidb Tsi tsi int set_range CODE: RETVAL = tsidb->CursorSet(tsidb, tsi, set_range); OUTPUT: RETVAL int CursorNext(tsidb, tsi) TsiDB tsidb Tsi tsi CODE: RETVAL = tsidb->CursorNext(tsidb, tsi); OUTPUT: RETVAL int CursorPrev(tsidb, tsi) TsiDB tsidb Tsi tsi CODE: RETVAL = tsidb->CursorPrev(tsidb, tsi); OUTPUT: RETVAL MODULE = Lingua::ZH::TaBE PACKAGE = Lingua::ZH::TaBE::TsiYinDB TsiYinDB new(package, type, db_name, flags) const char * package int type const char * db_name int flags CODE: RETVAL = TSIYINDB = tabeTsiYinDBOpen(type, db_name, flags); OUTPUT: RETVAL int type(tsiyindb) TsiYinDB tsiyindb CODE: RETVAL = tsiyindb->type; OUTPUT: RETVAL int flags(tsiyindb) TsiYinDB tsiyindb CODE: RETVAL = tsiyindb->flags; OUTPUT: RETVAL char * db_name(tsiyindb) TsiYinDB tsiyindb CODE: RETVAL = tsiyindb->db_name; OUTPUT: RETVAL void Close(tsiyindb) TsiYinDB tsiyindb CODE: tsiyindb->Close(tsiyindb); int RecordNumber(tsiyindb) TsiYinDB tsiyindb CODE: RETVAL = tsiyindb->RecordNumber(tsiyindb); OUTPUT: RETVAL int Put(tsiyindb, tsiyin) TsiYinDB tsiyindb TsiYin tsiyin CODE: RETVAL = tsiyindb->Put(tsiyindb, tsiyin); OUTPUT: RETVAL int Get(tsiyindb, tsiyin) TsiYinDB tsiyindb TsiYin tsiyin CODE: RETVAL = tsiyindb->Get(tsiyindb, tsiyin); OUTPUT: RETVAL int CursorSet(tsiyindb, tsiyin, set_range) TsiYinDB tsiyindb TsiYin tsiyin int set_range CODE: RETVAL = tsiyindb->CursorSet(tsiyindb, tsiyin, set_range); OUTPUT: RETVAL int CursorNext(tsiyindb, tsiyin) TsiYinDB tsiyindb TsiYin tsiyin CODE: RETVAL = tsiyindb->CursorNext(tsiyindb, tsiyin); OUTPUT: RETVAL int CursorPrev(tsiyindb, tsiyin) TsiYinDB tsiyindb TsiYin tsiyin CODE: RETVAL = tsiyindb->CursorPrev(tsiyindb, tsiyin); OUTPUT: RETVAL