bool nglContext::InitExtension (const nglChar* pExtName) { const GLExtNameInfo* ext_info; const GLExtFuncInfo* func_info; uint i; nglString ExtName(pExtName); std::string extname(ExtName.GetStdString()); /* First lookup extension record block */ for (i = 0; (ext_info = &(gpGLExtensionNameTable[i])), ext_info->pName && strcmp(ext_info->pName, extname.c_str()); i++); if (!ext_info->pName) /* Two solutions here * 1.- this extensions has no associated functions (only macros) * 2.- we don't have it yet in our registry * We're working hard so 1 is the good answer, so Init() actually succeeded */ return true; /* Then initialize each extension's function */ uint last = gpGLExtensionNameTable[i+1].Index; for (i = ext_info->Index; i < last; i++) { func_info = &gpGLExtensionFuncTable[i]; this->*(func_info->pFunc) = LookupExtFunc(func_info->pName); } return true; }
GuiExtPoolItem::GuiExtPoolItem(const sp<IBinder>& token, bool isHwcNeeded, uint32_t poolId, uint32_t /*w*/, uint32_t /*h*/, DefaultKeyedVector< uint32_t, sp<DispInfo> >& dispList, sp<IBinder::DeathRecipient> observer) : mConsumerDeathListener(NULL) //, mGPUUsedBq(NULL) , mGPUUsedProducer(NULL) , mGPUUsedConsumer(NULL) #if !SUPPORT_MULTIBQ_FOR_HWC , mHwcUsedBq(NULL) #endif , mId(poolId) , mIsHwcNeeded(isHwcNeeded) , mGpuUsedBufNum(MAX_GLES_DEQUEUED_NUM) , mProducerPid(-1) , mProducerToken(token) , mProducerDeathObserver(observer) { GUIEXT_LOGV("GuiExtPoolItem ctor, poolId=%d, isHwcNeeded=%d, token=%p", poolId, isHwcNeeded, token.get()); //String8 name(szUsageName[0]); //name.appendFormat("_%d", poolId); //mGPUUsedBq = createBufferQueue(w, h, mGpuUsedBufNum, name); //createBufferQueue(w, h, mGpuUsedBufNum, name, &mGPUUsedProducer, &mGPUUsedConsumer); #ifdef CONFIG_FOR_SOURCE_PQ setOverlaySessionMode(true); #endif if (mIsHwcNeeded) { String8 name(szUsageName[1]); name.appendFormat("_%d", poolId); #if SUPPORT_MULTIBQ_FOR_HWC uint32_t disp_size = dispList.size(); for (uint32_t i = 0; i < disp_size; i++) { uint32_t type = dispList[i]->type; String8 extname(name); extname.appendFormat("_%d", type); sp<HwcBqSlot> slot = new HwcBqSlot(); //slot->bq = createBufferQueue(dispList[i]->w, dispList[i]->h, dispList[i]->bufNum, extname); createBufferQueue(dispList[i]->w, dispList[i]->h, dispList[i]->bufNum, extname, &slot->mProducer, &slot->mConsumer); slot->type = type; slot->bufNum = dispList[i]->bufNum; mHwcUsedBqList.add(type, slot); } #else mHwcUsedBq = createBufferQueue(dispList[0]->w, dispList[0]->h, dispList[i]->bufNum, name); #endif } mProducerPid = (NULL != token->localBinder()) ? getpid() : IPCThreadState::self()->getCallingPid(); for (uint32_t i = 0; i < GUI_EXT_USAGE_MAX; i++) mIsDisconnected[i] = true; }
QVariantMap Path::parse(QString path) const { QFileInfo info(path); QVariantMap pathObject; // TODO: Implement resolve // path = resolve("", path); pathObject["ext"] = extname(path); pathObject["name"] = basename(path, pathObject["ext"].toString()); pathObject["dir"] = dirname(path); // TODO: Implement root return pathObject; }
static void globals_init(char *program) { char *p; int n; #ifdef WIN32 setvbuf(stdout,NULL,_IONBF,0); #else signal(SIGPIPE,SIG_IGN); #endif /* public globals */ st_ops.output_directory = "."; st_ops.output_prefix = ""; st_ops.output_postfix = ""; st_ops.output_format = NULL; /* private globals */ st_priv.progname = ((p = strrchr(program,PATHSEPCHAR))) ? (p + 1) : program; if ((p = extname(st_priv.progname))) *(p-1) = 0; strcpy(st_priv.fullprogname,st_priv.progname); st_priv.progmode = NULL; st_priv.clobber_action = CLOBBER_ACTION_ASK; st_priv.reorder_type = ORDER_NATURAL; st_priv.progress_type = PROGRESS_PERCENT; st_priv.is_aliased = FALSE; st_priv.show_hmmss = FALSE; st_priv.suppress_warnings = FALSE; st_priv.suppress_stderr = FALSE; st_priv.screen_dirty = FALSE; st_input.type = INPUT_CMDLINE; st_input.filename_source = NULLDEVICE; st_input.fd = NULL; st_input.argn = 0; st_input.argc = 0; st_input.argv = NULL; st_input.filecur = 0; st_input.filemax = 0; p = scan_env(SHNTOOL_DEBUG_ENV); n = p ? atoi(p) : 0; st_priv.debug_level = (n > 0) ? n : 0; }
int select_iimage_according_fname(char *name, uint32_t flags) { int iImage; char *ext; if (flags & FILE_ATTRIBUTE_DIRECTORY) { iImage = gdmgr._iico_dir; } else { ext = extname(name); if (!strcasecmp(ext, "csf")) { iImage = gdmgr._iico_csf; } else if (!strcasecmp(ext, "txt")) { iImage = gdmgr._iico_txt; } else if (!strcasecmp(ext, "nma")) { iImage = gdmgr._iico_nma; } else if (!strcasecmp(ext, "ini")) { iImage = gdmgr._iico_ini; } else { iImage = gdmgr._iico_unknown; } } return iImage; }
void SdlPlatform::Compile(Font *obj) { bfs::create_directories(obj->GetOutputPath().parent_path()); IResource *res = const_cast<IResource *>(obj->GetResource()); Image *img = static_cast<Image *>(res); std::ostringstream cmd; bfs::path toolPath(this->GetName()); toolPath /= PLATFORM_SDL_FONTGEN_COMMAND; cmd << toolPath.string() << " \""; // file_string cmd << obj->GetInputPath() << "\""; cmd << " \"" << obj->GetName() << "\" " << obj->GetCharacters() << " "; cmd << obj->GetGlyphWidth() << " " << obj->GetGlyphHeight(); if (obj->IsUsingAtlas()) { cmd << " \"" << res->GetFilename() << "\" " << img->GetX() << " " << img->GetY(); } RUN_COMMAND(cmd); // current cache dump pCache->Dump(); bfs::path fontXML("tmp/font.xml"); cmd.str(""); cmd << e->bfsExeName.string() << " -i " << fontXML << " -p " << this->GetName(); RUN_COMMAND(cmd); // updated cache reload pCache->Reset(); pCache->Load(); bfs::path fontSprite = obj->GetOutputPath(); fontSprite.replace_extension(".sprite"); //bfs::remove(fontXML); obj->SetSprite(fontSprite); obj->AddFilePath(fontSprite); /* build extension tables for languages */ DictionaryMap dict = e->GetDictionaries(); DictionaryMapIterator it = dict.begin(); DictionaryMapIterator end = dict.end(); for (; it != end; ++it) { Dictionary *dict = (*it).second; u32 size = dict->GetExtensionTableSize(); if (size) { //std::ostringstream extname; //extname << "l10n/" << dict->pcGetLanguage() << "/" << obj->GetFilename() << "_ext"; //extname << res->GetName() << "_ext"; std::string extname(res->GetName()); extname += "_ext"; IResource *ext = e->GetResource(extname.c_str(), dict->pcGetLanguage()); //IResource *ext = e->GetResource(res->GetName(), dict->pcGetLanguage()); if (ext) { //std::string x(res->GetFilename()); std::ostringstream x; //x << "l10n/" << dict->pcGetLanguage() << "/" << res->GetName() << "_ext.tga"; x << res->GetName() << "_ext.tga"; bfs::path xx(e->GetOutputPath()); xx /= x.str(); //pCache->AddFilename(xx.string().c_str()); obj->SetExtId(pCache->GetFilenameId(xx.string().c_str())); std::ostringstream x2; //x2 << "l10n/" << dict->pcGetLanguage() << "/" << res->GetName() << "_ext.sprite"; x2 << res->GetName() << "_ext.sprite"; xx = e->GetOutputPath(); xx /= x2.str(); pCache->AddFilename(xx.string().c_str()); obj->SetExtId(pCache->GetFilenameId(xx.string().c_str())); //bfs::path sprite = this->ProcessFont(obj, ext, size); //obj->AddFilePath(sprite); this->ProcessFont(obj, ext, size); std::ostringstream x3; x3 << "l10n/" << dict->pcGetLanguage() << "/" << res->GetName() << "_ext.sprite"; xx = e->GetOutputPath(); xx /= x3.str(); obj->AddFilePath(xx.string().c_str()); } else { //Error(ERROR_UNKNOWN, TAG "Needed language '%s' resource extension table %s for font %s not found.", dict->pcGetLanguage(), extname.c_str(), obj->GetName()); //Error(ERROR_UNKNOWN, TAG "Needed language '%s' specific resource for font %s not found.", dict->pcGetLanguage(), obj->GetName()); } } } }
// // On_DlgDDescNotify() // BOOL On_DlgDDescNotify(HWND hdlgP, int DlgItem, LPNMHDR lpNMHdr) { LPNMTREEVIEW lpnmitem; HTREEITEM htvi; TVITEMEX tvi; char text[_MAX_PATH]; POINT point; if (gdmgr._syncing || (lpNMHdr->idFrom != IDC_TV_DDESC_EXPLORER)) { return FALSE; } lpnmitem = (LPNMTREEVIEW)lpNMHdr; // NM_RCLICK/NM_CLICK/NM_DBLCLK这些通知被发来后,其附代参数没法指定是哪个叶子句柄, // 需通过判断鼠标坐标来判断是哪个叶子被按下? // 1. GetCursorPos, 得到屏幕坐标系下的鼠标坐标 // 2. TreeView_HitTest1(自写宏),由屏幕坐标系下的鼠标坐标返回指向的叶子句柄 GetCursorPos(&point); // 得到的是屏幕坐标 TreeView_HitTest1(lpNMHdr->hwndFrom, point, htvi); // NM_表示对通用控件都通用,范围丛(0, 99) // TVN_表示只能TreeView通用,范围丛(400, 499) if (lpNMHdr->code == NM_RCLICK) { // // 右键单击: 弹出菜单 // // 准备两个菜单上下文变量 TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT, text); strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); gdmgr._menu_lparam = (uint32_t)tvi.lParam; // new if (!can_execute_tack(TASK_NEW) || strcasecmp(gdmgr._menu_text, game_config::path.c_str())) { EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_EXTRAINSDIST, MF_BYCOMMAND | MF_GRAYED); } if (!can_execute_tack(TASK_NEW)) { EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_CAMPAIGN, MF_BYCOMMAND | MF_GRAYED); } // explorer if (!can_execute_tack(TASK_EXPLORER) || (_stricmp(extname(gdmgr._menu_text), "bin") && _stricmp(extname(gdmgr._menu_text), "dat"))) { EnableMenuItem(gdmgr._hpopup_explorer, IDM_EXPLORER_WML, MF_BYCOMMAND | MF_GRAYED); } // delete if (!can_execute_tack(TASK_DELETE) || _stricmp(extname(gdmgr._menu_text), "bin") || !strstr(gdmgr._menu_text, "\\campaigns\\")) { EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM0, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM1, MF_BYCOMMAND | MF_GRAYED); } TrackPopupMenuEx(gdmgr._hpopup_ddesc, 0, point.x, point.y, hdlgP, NULL); EnableMenuItem(gdmgr._hpopup_new, IDM_NEW_EXTRAINSDIST, MF_BYCOMMAND | MF_ENABLED); EnableMenuItem(gdmgr._hpopup_explorer, IDM_EXPLORER_WML, MF_BYCOMMAND | MF_ENABLED); EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM0, MF_BYCOMMAND | MF_ENABLED); EnableMenuItem(gdmgr._hpopup_delete, IDM_DELETE_ITEM1, MF_BYCOMMAND | MF_ENABLED); } else if (lpNMHdr->code == NM_CLICK) { // // 左键单击: 如果底下被击的是目录,且没有生成过叶子,成生叶子 // strcpy(text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_CHILDREN, NULL); if (tvi.cChildren && !TreeView_GetChild(lpNMHdr->hwndFrom, htvi)) { dir_2_tv(lpNMHdr->hwndFrom, htvi, text, 0); } // 址址栏中显示选中目录 strcpy(text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); if (!is_directory(text)) { strcpy(text, dirname(text)); } // Edit_SetText(GetDlgItem(hdlgP, IDC_ET_DDESC_WWWROOT), text + strlen(dirname(game_config::path.c_str())) + 1); } else if (lpNMHdr->code == NM_DBLCLK) { // // 目录: 展开/折叠叶子(系统自动) // 文件: 用特定应程序打开 // // 切换到编辑窗口 TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_IMAGE | TVIF_PARAM | TVIF_TEXT, text); if (!_stricmp(text, "hero.dat")) { strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); gdmgr._menu_lparam = (uint32_t)tvi.lParam; if (gdmgr._da != da_wgen) { title_select(da_wgen); } else { wgen_enter_ui(); } } else if (!_stricmp(text, "tb.dat") || !_stricmp(text, "tb-1.dat")) { strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); gdmgr._menu_lparam = (uint32_t)tvi.lParam; editor_config::type = BIN_BUILDINGRULE; if (gdmgr._da != da_visual) { title_select(da_visual); } else { visual_enter_ui(); } } else if (!_stricmp(extname(text), "bin")) { strcpy(gdmgr._menu_text, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); if (wml_checksum_from_file(std::string(gdmgr._menu_text))) { gdmgr._menu_lparam = (uint32_t)tvi.lParam; if (strstr(gdmgr._menu_text, "\\campaigns\\") && !strstr(gdmgr._menu_text, "duel") && !strstr(gdmgr._menu_text, "legend_of_bei_liu") && !strstr(gdmgr._menu_text, "tower_defense") && !strstr(gdmgr._menu_text, "tutorial")) { if (gdmgr._da != da_campaign) { title_select(da_campaign); } else { campaign_enter_ui(); } } else if (strstr(gdmgr._menu_text, "data.bin")) { if (gdmgr._da != da_core) { title_select(da_core); } else { // core_enter_ui(); } } else { editor_config::type = BIN_WML; if (gdmgr._da != da_visual) { title_select(da_visual); } else { visual_enter_ui(); } } } } } else if (lpNMHdr->code == TVN_ITEMEXPANDED) { // // 子叶子已被展开或折叠, 是折叠时删除所子有叶子, 以便下次展开时通反映最近文件系统 // if (lpnmitem->action & TVE_COLLAPSE) { TreeView_Walk(lpNMHdr->hwndFrom, lpnmitem->itemNew.hItem, FALSE, NULL, NULL, TRUE); TreeView_SetChilerenByPath(lpNMHdr->hwndFrom, htvi, TreeView_FormPath(lpNMHdr->hwndFrom, htvi, dirname(game_config::path.c_str()))); } } return FALSE; }
void On_DlgDDescCommand(HWND hdlgP, int id, HWND hwndCtrl, UINT codeNotify) { char *ptr = NULL; int retval; char text[_MAX_PATH]; BOOL fok; std::string str; std::stringstream strstr; switch (id) { case IDC_BT_DDESC_BROWSE: ptr = GetBrowseFilePath(hdlgP); if (!ptr) { break; } strcpy(text, appendbackslash(ptr)); if (text[strlen(text) - 1] == '\\') { text[strlen(text) - 1] = 0; } if (!check_wok_root_folder(text)) { posix_print_mb("%s,不是有效的kingdom-src-x.x.x源数据目录,请重新选择", appendbackslash(text)); break; } if (strcasecmp(ptr, game_config::path.c_str())) { game_config::path = ptr; gdmgr.heros_.set_path(game_config::path.c_str()); Edit_SetText(GetDlgItem(hdlgP, IDC_ET_DDESC_WWWROOT), appendbackslash(ptr)); OnLSBt(TRUE); if (gdmgr._da != da_sync) { title_select(da_sync); } else { sync_enter_ui(); } update_locale_dir(); } break; case IDM_NEW_EXTRAINSDIST: sprintf(text, "Do you want to extract install-material to C:\\kingdom-ins?"); retval = MessageBox(hdlgP, text, "Confirm Generate", MB_YESNO | MB_DEFBUTTON2); if (retval == IDYES) { fok = extra_kingdom_ins_disk(gdmgr._menu_text, "c:\\kingdom-ins", "c:\\kingdom-ins-android\\com.freeors.kingdom"); posix_print_mb("Extract install-material from %s to C:\\kingdom-ins, %s!!", gdmgr._menu_text, fok? "Success": "Fail"); } break; case IDM_NEW_CAMPAIGN: if (campaign_new()) { // title_select(da_sync); } break; case IDM_EXPLORER_WML: if (!_stricmp(gdmgr._menu_text, "hero.dat")) { if (gdmgr._da != da_wgen) { title_select(da_wgen); } else { wgen_enter_ui(); } } else if (!_stricmp(gdmgr._menu_text, "tb.dat")) { editor_config::type = BIN_BUILDINGRULE; if (gdmgr._da != da_visual) { title_select(da_visual); } else { visual_enter_ui(); } } else if (!_stricmp(extname(gdmgr._menu_text), "bin")) { if (wml_checksum_from_file(std::string(gdmgr._menu_text))) { editor_config::type = BIN_WML; if (gdmgr._da != da_visual) { title_select(da_visual); } else { visual_enter_ui(); } } } break; case IDM_DELETE_ITEM0: // 册除指定的文件/目录 strstr.str(""); str = gdmgr._menu_text; strstr << str.substr(0, str.rfind("\\xwml")); strstr << "\\data\\campaigns\\" << offextname(basename(gdmgr._menu_text)); strcpy(text, strstr.str().c_str()); strstr.str(""); strstr << "您想删除文件:" << gdmgr._menu_text << ",以及目录:"; strstr << text << "?"; // Confirm Multiple File Delete retval = MessageBox(hdlgP, strstr.str().c_str(), "确认删除", MB_YESNO | MB_DEFBUTTON2); if (retval == IDYES) { if (delfile1(gdmgr._menu_text)) { TreeView_DeleteItem(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam); TreeView_SetChilerenByPath(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam, dirname(gdmgr._menu_text)); } else { posix_print_mb("Failed delete %s !", gdmgr._menu_text); } if (!delfile1(text)) { posix_print_mb("Failed delete %s !", text); } sync_refresh_sync(); } break; case IDM_DELETE_ITEM1: strstr.str(""); strstr << "将产生不同步,您想删除文件:" << gdmgr._menu_text << "?"; // Confirm Multiple File Delete retval = MessageBox(hdlgP, strstr.str().c_str(), "确认删除", MB_YESNO | MB_DEFBUTTON2); if (retval == IDYES) { if (delfile1(gdmgr._menu_text)) { TreeView_DeleteItem(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam); TreeView_SetChilerenByPath(GetDlgItem(hdlgP, IDC_TV_DDESC_EXPLORER), (HTREEITEM)(UINT_PTR)gdmgr._menu_lparam, dirname(gdmgr._menu_text)); } else { posix_print_mb("Failed delete %s !", gdmgr._menu_text); } // inform user, there is non sync. if (gdmgr._da != da_sync) { title_select(da_sync); } else { // forbid refresh sync_enter_ui(); } } break; default: break; } return; }
void WiiPlatform::Compile(Font *obj) { bfs::create_directories(obj->GetOutputPath().parent_path()); IResource *res = const_cast<IResource *>(obj->GetResource()); Image *img = static_cast<Image *>(res); std::ostringstream cmd; bfs::path toolPath(this->GetName()); toolPath /= PLATFORM_WII_FONTGEN_COMMAND; cmd << toolPath.string() << " \""; // file_string cmd << obj->GetInputPath() << "\""; cmd << " \"" << obj->GetName() << "\" " << obj->GetCharacters(); if (obj->IsUsingAtlas()) { cmd << " \"" << res->GetFilename() << "\" " << img->GetX() << " " << img->GetY(); } RUN_COMMAND(cmd); // current cache dump pCache->Dump(); bfs::path fontXML("tmp/font.xml"); cmd.str(""); cmd << e->bfsExeName.string() << " -i " << fontXML << " -p " << this->GetName(); RUN_COMMAND(cmd); // updated cache reload pCache->Reset(); pCache->Load(); bfs::path fontSprite = obj->GetOutputPath(); fontSprite.replace_extension(".sprite"); bfs::remove(fontXML); obj->SetSprite(fontSprite); obj->AddFilePath(fontSprite); /*if (e->IsCompressionEnabled()) { // .font bfs::path pathNewExtension = obj->GetOutputPath(); pathNewExtension.replace_extension(".lzf"); cmd.str(""); cmd << (wiiToolPath / LZFTOOL).string() << " \"" << obj->GetOutputPath() << "\" \"" << pathNewExtension << "\""; // file_string DebugInfo("CMD: %s\n", cmd.str().c_str()); cmdRetCode = system(cmd.str().c_str()); if (cmdRetCode) { fprintf(stderr, "%s didn't execute properly. Return code: %d.\n", LZFTOOL, cmdRetCode); //exit(EXIT_FAILURE); } bfs::remove(obj->GetOutputPath()); bfs::rename(pathNewExtension, obj->GetOutputPath()); // .sprite pathNewExtension = fontSprite; pathNewExtension.replace_extension(".lzf"); cmd.str(""); cmd << (wiiToolPath / LZFTOOL).string() << " \"" << fontSprite << "\" \"" << pathNewExtension << "\""; // file_string DebugInfo("CMD: %s\n", cmd.str().c_str()); cmdRetCode = system(cmd.str().c_str()); if (cmdRetCode) { fprintf(stderr, "%s didn't execute properly. Return code: %d.\n", LZFTOOL, cmdRetCode); //exit(EXIT_FAILURE); } bfs::remove(fontSprite); bfs::rename(pathNewExtension, fontSprite); }*/ /* build extension tables for languages */ DictionaryMap dict = e->GetDictionaries(); DictionaryMapIterator it = dict.begin(); DictionaryMapIterator end = dict.end(); for (; it != end; ++it) { Dictionary *dict = (*it).second; u32 size = dict->GetExtensionTableSize(); if (size) { //std::ostringstream extname; //extname << "l10n/" << dict->pcGetLanguage() << "/" << obj->GetFilename() << "_ext"; //IResource *ext = e->GetResource(extname.str().c_str()); std::string extname(res->GetName()); extname += "_ext"; IResource *ext = e->GetResource(extname.c_str(), dict->pcGetLanguage()); //IResource *ext = e->GetResource(res->GetName(), dict->pcGetLanguage()); if (ext) { std::string x(res->GetFilename()); x += "_ext.tpl"; bfs::path xx(e->GetOutputPath()); xx /= x; pCache->AddFilename(xx.string().c_str()); obj->SetExtId(pCache->GetFilenameId(xx.string().c_str())); x = res->GetFilename(); x += "_ext.sprite"; xx = e->GetOutputPath(); xx /= x; pCache->AddFilename(xx.string().c_str()); obj->SetExtId(pCache->GetFilenameId(xx.string().c_str())); bfs::path sprite = this->ProcessFont(obj, ext, size); obj->AddFilePath(sprite); } else { //Error(ERROR_UNKNOWN, TAG "Needed language '%s' resource extension table %s for font %s not found.", dict->pcGetLanguage(), extname.c_str(), obj->GetName()); Error(ERROR_UNKNOWN, TAG "Needed language '%s' specific resource for font %s not found.", dict->pcGetLanguage(), obj->GetName()); } } } }