int WINAPI PIM_ReloadFontMapResource() { FreeFontMapResource(); LoadFontMapResource(); return 1; }
/** 装载输入法使用的资源,如果失败,则输入法不起作用 * 返回: * 成功:1,失败:0 */ int PIM_LoadResources() { LoadWordLibraryResource(); //词库 LoadBigramResource(); //Bigram数据 if (share_segment->resource_loaded) return 1; share_segment->resource_loaded = 1; LoadSpwResource(); //短语 LoadTopZiResource(); //置顶字 LoadZiCacheResource(); //汉字Cache LoadHZDataResource(); //装载汉字数据 LoadCiCacheResource(); //词Cache //LoadNewWordTable(); //新词表 LoadSPResource(); //装载双拼资源 LoadSymbolResource(); //装载中文符号资源 LoadFontMapResource(); //load font map GenGBKMapResource(); //load gbk map // LoadEnglishResource(); //装载英文词典数据 // LoadEnglishTransResource(); //装载英文翻译数据 // LoadURLResource(); //装载URL数据 // LoadBHResource(); //装载笔划数据文件 return 1; }
int FontCanSupport(UC zi) { int pos_offset; byte pos_mask,*pos; TCHAR *fontname,*pos1,*pos2; extern int LoadFontMapResource(); if(!share_segment->fontmap_loaded) return 1; //if font map data isn't loaded,return 1(support) if(!fontmap) { fontmap = GetReadOnlySharedMemory(fontmap_share_name); //可能存在其他进程已经装载了,但是退出后共享内存被释放的问题 if (!fontmap && share_segment->fontmap_loaded) { share_segment->fontmap_loaded = 0; LoadFontMapResource(); } } if(!fontmap) return 1; fontname = (TCHAR *)(fontmap + 0x6000); if (!fontname) return 1; pos1 = _tcsstr( fontname, pim_config->chinese_font_name ); pos2 = _tcsstr( fontname, TEXT("{") ); if (!pos1 || pos1 > pos2) return 1; if (!fontmap || zi > 0x2FFFF) return 1; //PUA if ( !_tcscmp(pim_config->chinese_font_name,TEXT("微软雅黑")) && zi >= 0xE000 && zi <= 0xF8FF ) return 0; pos_offset = zi >> 3; pos_mask = 1 << (zi % 8); pos = (byte*)(fontmap + pos_offset); return (*pos) & pos_mask; }