1 /**
2  * @file xdict (dictionary)
3  * @author Hightman Mar
4  * @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim)
5  * $Id$
6  */
7 
8 #ifndef	_SCWS_XDICT_20070528_H_
9 #define	_SCWS_XDICT_20070528_H_
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /* constant var define */
16 #define	SCWS_WORD_FULL		0x01	// 多字: 整词
17 #define	SCWS_WORD_PART		0x02	// 多字: 前词段
18 #define	SCWS_WORD_USED		0x04	// 多字: 已使用
19 #define	SCWS_WORD_RULE		0x08	// 多字: 自动识别的
20 #define	SCWS_WORD_LONG		0x10	// 多字: 短词组成的长词
21 
22 #define	SCWS_WORD_MALLOCED	0x80	// xdict_query 结果必须调用 free
23 
24 #define	SCWS_ZFLAG_PUT		0x02	// 单字: 已使用
25 #define	SCWS_ZFLAG_N2		0x04	// 单字: 双字名词头
26 #define	SCWS_ZFLAG_NR2		0x08	// 单字: 词头且为双字人名
27 #define	SCWS_ZFLAG_WHEAD	0x10	// 单字: 词头
28 #define	SCWS_ZFLAG_WPART	0x20	// 单字: 词尾或词中
29 #define	SCWS_ZFLAG_ENGLISH	0x40	// 单字: 夹在中间的英文
30 #define SCWS_ZFLAG_SYMBOL   0x80    // 单字: 符号系列
31 #define	SCWS_XDICT_PRIME	0x3ffd	// 词典结构树数:16381
32 
33 /* xdict open mode */
34 #define	SCWS_XDICT_XDB		1
35 #define	SCWS_XDICT_MEM		2
36 #define	SCWS_XDICT_TXT		4		// ...
37 #define	SCWS_XDICT_SET		4096	// set flag.
38 
39 /* data structure for word(12bytes) */
40 typedef struct scws_word
41 {
42 	float tf;
43 	float idf;
44 	unsigned char flag;
45 	char attr[3];
46 }	word_st, *word_t;
47 
48 typedef struct scws_xdict
49 {
50 	void *xdict;
51 	int xmode;
52 	int ref;	// hightman.20130110: refcount (zero to really free/close)
53 	struct scws_xdict *next;
54 }	xdict_st, *xdict_t;
55 
56 /* pub function (api) */
57 xdict_t xdict_open(const char *fpath, int mode);
58 void xdict_close(xdict_t xd);
59 
60 /* fork xdict */
61 xdict_t xdict_fork(xdict_t xd);
62 
63 /* add a new dict file into xd, succ: 0, error: -1, Mblen only used for XDICT_TXT */
64 xdict_t xdict_add(xdict_t xd, const char *fpath, int mode, unsigned char *ml);
65 
66 /* NOW this is ThreadSafe function */
67 word_t xdict_query(xdict_t xd, const char *key, int len);
68 
69 #ifdef __cplusplus
70 }
71 #endif
72 
73 #endif
74