⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.h

📁 使用Qt4编写的星际译王(stardict)
💻 H
字号:
#ifndef __SD_LIB_H__#define __SD_LIB_H__#include <cstdio>#include <list>#include <memory>#include <string>#include <vector>#include "dictziplib.hpp"const int MAX_MATCH_ITEM_PER_LIB=100;const int MAX_FUZZY_DISTANCE= 3; // at most MAX_FUZZY_DISTANCE-1 differences allowed when find similar wordsstruct cacheItem {	guint32 offset;	gchar *data;	//write code here to make it inline	cacheItem() {data= NULL;}	~cacheItem() {g_free(data);}};const int WORDDATA_CACHE_NUM = 10;const int INVALID_INDEX=-100;class DictBase {public:	DictBase();	~DictBase();	gchar * GetWordData(guint32 idxitem_offset, guint32 idxitem_size);	bool containSearchData();	bool SearchData(std::vector<std::string> &SearchWords, guint32 idxitem_offset, guint32 idxitem_size, gchar *origin_data);protected:	std::string sametypesequence;	FILE *dictfile;	std::auto_ptr<dictData> dictdzfile;private:	cacheItem cache[WORDDATA_CACHE_NUM];	gint cache_cur;	};//this structure contain all information about dictionarystruct DictInfo {	std::string ifo_file_name;	guint32 wordcount;	std::string bookname;	std::string author;	std::string email;	std::string website;	std::string date;	std::string description;	guint32 index_file_size;	std::string sametypesequence;	bool load_from_ifo_file(const std::string& ifofilename, bool istreedict);};class index_file {public:	guint32 wordentry_offset;	guint32 wordentry_size;  	virtual ~index_file() {}	virtual bool load(const std::string& url, gulong wc, gulong fsize) = 0;	virtual const gchar *get_key(glong idx) = 0;	virtual void get_data(glong idx) = 0;	virtual  const gchar *get_key_and_data(glong idx) = 0;	virtual bool lookup(const char *str, glong &idx) = 0;};class Dict : public DictBase {private:		std::string ifo_file_name;	gulong wordcount;	std::string bookname;	std::auto_ptr<index_file> idx_file;		bool load_ifofile(const std::string& ifofilename, gulong &idxfilesize);public:	Dict() {}	bool load(const std::string& ifofilename);	gulong narticles() { return wordcount; }	const std::string& dict_name() { return bookname; }	const std::string& ifofilename() { return ifo_file_name; }	const gchar *get_key(glong index)	{	return idx_file->get_key(index);	}	gchar *get_data(glong index)		{			idx_file->get_data(index);			return DictBase::GetWordData(idx_file->wordentry_offset, idx_file->wordentry_size);		}	void get_key_and_data(glong index, const gchar **key, guint32 *offset, guint32 *size)		{			*key = idx_file->get_key_and_data(index);			*offset = idx_file->wordentry_offset;			*size = idx_file->wordentry_size;		}	bool Lookup(const char *str, glong &idx) { return idx_file->lookup(str, idx);	}	bool LookupWithRule(GPatternSpec *pspec, glong *aIndex, int iBuffLen);};typedef std::list<std::string> strlist_t;class Libs {public:	typedef void (*progress_func_t)(void);	Libs(progress_func_t f=NULL);	~Libs();	void load_dict(const std::string& url);	void load(const strlist_t& dicts_dirs, 		  const strlist_t& order_list, 		  const strlist_t& disable_list);	void reload(const strlist_t& dicts_dirs, 		    const strlist_t& order_list, 		    const strlist_t& disable_list);	glong narticles(int idict) { return oLib[idict]->narticles(); }	const std::string& dict_name(int idict) { return oLib[idict]->dict_name(); }	gint ndicts() { return oLib.size(); }	const gchar * poGetWord(glong iIndex,int iLib) { 		return oLib[iLib]->get_key(iIndex); 	}	gchar * poGetWordData(glong iIndex,int iLib) {		if (iIndex==INVALID_INDEX)			return NULL;		return oLib[iLib]->get_data(iIndex);	}	const gchar *poGetCurrentWord(glong *iCurrent);	const gchar *poGetNextWord(const gchar *word, glong *iCurrent);	const gchar *poGetPreWord(glong *iCurrent);	bool LookupWord(const gchar* sWord, glong& iWordIndex, int iLib) {		return oLib[iLib]->Lookup(sWord, iWordIndex);	}	bool LookupSimilarWord(const gchar* sWord, glong & iWordIndex, int iLib);	bool SimpleLookupWord(const gchar* sWord, glong & iWordIndex, int iLib);  	bool LookupWithFuzzy(const gchar *sWord, gchar *reslist[], gint reslist_size);	gint LookupWithRule(const gchar *sWord, gchar *reslist[]);	bool LookupData(const gchar *sWord, std::vector<gchar *> *reslist);private:	std::vector<Dict *> oLib; // word Libs.	int iMaxFuzzyDistance;	progress_func_t progress_func;};typedef enum {	qtSIMPLE, qtREGEXP, qtFUZZY, qtDATA} query_t;	extern query_t analyze_query(const char *s, std::string& res); #endif//!__SD_LIB_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -