bool NativeLangSpeaker::getMsgBoxLang(const char *msgBoxTagName, generic_string & title, generic_string & message) { title = TEXT(""); message = TEXT(""); if (!_nativeLangA) return false; TiXmlNodeA *msgBoxNode = _nativeLangA->FirstChild("MessageBox"); if (!msgBoxNode) return false; msgBoxNode = searchDlgNode(msgBoxNode, msgBoxTagName); if (!msgBoxNode) return false; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); // Set Title const char *titre = (msgBoxNode->ToElement())->Attribute("title"); const char *msg = (msgBoxNode->ToElement())->Attribute("message"); if ((titre && titre[0]) && (msg && msg[0])) { title = wmc->char2wchar(titre, _nativeLangEncoding); message = wmc->char2wchar(msg, _nativeLangEncoding); return true; } return false; }
void NativeLangSpeaker::changeConfigLang(HWND hDlg) { if (!_nativeLangA) return; TiXmlNodeA *styleConfDlgNode = _nativeLangA->FirstChild("Dialog"); if (!styleConfDlgNode) return; styleConfDlgNode = styleConfDlgNode->FirstChild("StyleConfig"); if (!styleConfDlgNode) return; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); // Set Title const char *titre = (styleConfDlgNode->ToElement())->Attribute("title"); if ((titre && titre[0]) && hDlg) { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); ::SetWindowText(hDlg, nameW); } for (TiXmlNodeA *childNode = styleConfDlgNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { HWND hItem = ::GetDlgItem(hDlg, id); if (hItem) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::SetWindowText(hItem, nameW); } } } styleConfDlgNode = styleConfDlgNode->FirstChild("SubDialog"); for (TiXmlNodeA *childNode = styleConfDlgNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { HWND hItem = ::GetDlgItem(hDlg, id); if (hItem) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::SetWindowText(hItem, nameW); } } } }
void NativeLangSpeaker::changePluginsAdminDlgLang(PluginsAdminDlg & pluginsAdminDlg) { if (_nativeLangA) { TiXmlNodeA *dlgNode = _nativeLangA->FirstChild("Dialog"); if (dlgNode) { dlgNode = searchDlgNode(dlgNode, "PluginsAdminDlg"); if (dlgNode) { WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); TiXmlNodeA *ColumnPluginNode = dlgNode->FirstChild("ColumnPlugin"); if (ColumnPluginNode) { const char *name = (ColumnPluginNode->ToElement())->Attribute("name"); if (name && name[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(name, _nativeLangEncoding); pluginsAdminDlg.changeColumnName(COLUMN_PLUGIN, nameW.c_str()); } } TiXmlNodeA *ColumnVersionNode = dlgNode->FirstChild("ColumnVersion"); if (ColumnVersionNode) { const char *name = (ColumnVersionNode->ToElement())->Attribute("name"); if (name && name[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(name, _nativeLangEncoding); pluginsAdminDlg.changeColumnName(COLUMN_VERSION, nameW.c_str()); } } const char *titre1 = (dlgNode->ToElement())->Attribute("titleAvailable"); const char *titre2 = (dlgNode->ToElement())->Attribute("titleUpdates"); const char *titre3 = (dlgNode->ToElement())->Attribute("titleInstalled"); if (titre1 && titre1[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre1, _nativeLangEncoding); pluginsAdminDlg.changeTabName(AVAILABLE_LIST, nameW.c_str()); } if (titre2 && titre2[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre2, _nativeLangEncoding); pluginsAdminDlg.changeTabName(UPDATES_LIST, nameW.c_str()); } if (titre3 && titre3[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre3, _nativeLangEncoding); pluginsAdminDlg.changeTabName(INSTALLED_LIST, nameW.c_str()); } } changeDlgLang(pluginsAdminDlg.getHSelf(), "PluginsAdminDlg"); } } }
void NativeLangSpeaker::changeLangTabDrapContextMenu(HMENU hCM) { const int POS_GO2VIEW = 0; const int POS_CLONE2VIEW = 1; const char *goToViewA = NULL; const char *cloneToViewA = NULL; if (_nativeLangA) { TiXmlNodeA *tabBarMenu = _nativeLangA->FirstChild("Menu"); if (tabBarMenu) tabBarMenu = tabBarMenu->FirstChild("TabBar"); if (tabBarMenu) { for (TiXmlNodeA *childNode = tabBarMenu->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int ordre; element->Attribute("order", &ordre); if (ordre == 5) goToViewA = element->Attribute("name"); else if (ordre == 6) cloneToViewA = element->Attribute("name"); } } //HMENU hCM = _tabPopupDropMenu.getMenuHandle(); #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); if (goToViewA && goToViewA[0]) { const wchar_t *goToViewG = wmc->char2wchar(goToViewA, _nativeLangEncoding); int cmdID = ::GetMenuItemID(hCM, POS_GO2VIEW); ::ModifyMenu(hCM, POS_GO2VIEW, MF_BYPOSITION|MF_STRING, cmdID, goToViewG); } if (cloneToViewA && cloneToViewA[0]) { const wchar_t *cloneToViewG = wmc->char2wchar(cloneToViewA, _nativeLangEncoding); int cmdID = ::GetMenuItemID(hCM, POS_CLONE2VIEW); ::ModifyMenu(hCM, POS_CLONE2VIEW, MF_BYPOSITION|MF_STRING, cmdID, cloneToViewG); } #else if (goToViewA && goToViewA[0]) { int cmdID = ::GetMenuItemID(hCM, POS_GO2VIEW); ::ModifyMenu(hCM, POS_GO2VIEW, MF_BYPOSITION, cmdID, goToViewA); } if (cloneToViewA && cloneToViewA[0]) { int cmdID = ::GetMenuItemID(hCM, POS_CLONE2VIEW); ::ModifyMenu(hCM, POS_CLONE2VIEW, MF_BYPOSITION, cmdID, cloneToViewA); } #endif } }
bool NativeLangSpeaker::changeDlgLang(HWND hDlg, const char *dlgTagName, char *title) { if (title) title[0] = '\0'; if (!_nativeLangA) return false; TiXmlNodeA *dlgNode = _nativeLangA->FirstChild("Dialog"); if (!dlgNode) return false; dlgNode = searchDlgNode(dlgNode, dlgTagName); if (!dlgNode) return false; #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); #endif // Set Title const char *titre = (dlgNode->ToElement())->Attribute("title"); if ((titre && titre[0]) && hDlg) { #ifdef UNICODE const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); ::SetWindowText(hDlg, nameW); #else ::SetWindowText(hDlg, titre); #endif if (title) strcpy(title, titre); } // Set the text of child control for (TiXmlNodeA *childNode = dlgNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { HWND hItem = ::GetDlgItem(hDlg, id); if (hItem) { #ifdef UNICODE const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::SetWindowText(hItem, nameW); #else ::SetWindowText(hItem, name); #endif } } } return true; }
void NativeLangSpeaker::changeShortcutmapperLang(ShortcutMapper * sm) { if (!_nativeLangA) return; TiXmlNodeA *shortcuts = _nativeLangA->FirstChild("Dialog"); if (!shortcuts) return; shortcuts = shortcuts->FirstChild("ShortcutMapper"); if (!shortcuts) return; for (TiXmlNodeA *childNode = shortcuts->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int index; if (element->Attribute("index", &index)) { if (index > -1 && index < 5) //valid index only { const char *name = element->Attribute("name"); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const wchar_t * nameW = wmc->char2wchar(name, _nativeLangEncoding); sm->translateTab(index, nameW); } } } }
generic_string NativeLangSpeaker::getFileBrowserLangMenuStr(int cmdID, const TCHAR *defaultStr) const { if (!_nativeLangA) return defaultStr; TiXmlNodeA *targetNode = _nativeLangA->FirstChild("FolderAsWorkspace"); if (!targetNode) return defaultStr; targetNode = targetNode->FirstChild("Menus"); if (!targetNode) return defaultStr; const char *name = NULL; for (TiXmlNodeA *childNode = targetNode->FirstChildElement("Item"); childNode; childNode = childNode->NextSibling("Item")) { TiXmlElementA *element = childNode->ToElement(); int id; const char *idStr = element->Attribute("id", &id); if (idStr && id == cmdID) { name = element->Attribute("name"); break; } } if (name && name[0]) { WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); return wmc->char2wchar(name, _nativeLangEncoding); } return defaultStr; }
generic_string NativeLangSpeaker::getSpecialMenuEntryName(const char *entryName) const { if (!_nativeLangA) return TEXT(""); TiXmlNodeA *mainMenu = _nativeLangA->FirstChild("Menu"); if (!mainMenu) return TEXT(""); mainMenu = mainMenu->FirstChild("Main"); if (!mainMenu) return TEXT(""); TiXmlNodeA *entriesRoot = mainMenu->FirstChild("Entries"); if (!entriesRoot) return TEXT(""); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); for (TiXmlNodeA *childNode = entriesRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); const char *idName = element->Attribute("idName"); if (idName) { const char *name = element->Attribute("name"); if (!strcmp(idName, entryName)) { return wmc->char2wchar(name, _nativeLangEncoding); } } } return TEXT(""); }
generic_string NativeLangSpeaker::getNativeLangMenuString(int itemID) const { if (!_nativeLangA) return TEXT(""); TiXmlNodeA *node = _nativeLangA->FirstChild("Menu"); if (!node) return TEXT(""); node = node->FirstChild("Main"); if (!node) return TEXT(""); node = node->FirstChild("Commands"); if (!node) return TEXT(""); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); for (TiXmlNodeA *childNode = node->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; if (element->Attribute("id", &id) && (id == itemID)) { const char *name = element->Attribute("name"); if (name) { return wmc->char2wchar(name, _nativeLangEncoding); } } } return TEXT(""); }
void NativeLangSpeaker::changeStyleCtrlsLang(HWND hDlg, int *idArray, const char **translatedText) { const int iColorStyle = 0; const int iUnderline = 8; HWND hItem; for (int i = iColorStyle ; i < (iUnderline + 1) ; i++) { if (translatedText[i] && translatedText[i][0]) { hItem = ::GetDlgItem(hDlg, idArray[i]); if (hItem) { #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const wchar_t *nameW = wmc->char2wchar(translatedText[i], _nativeLangEncoding); ::SetWindowText(hItem, nameW); #else ::SetWindowText(hItem, translatedText[i]); #endif } } } }
void NativeLangSpeaker::changeFindReplaceDlgLang(FindReplaceDlg & findReplaceDlg) { if (_nativeLangA) { TiXmlNodeA *dlgNode = _nativeLangA->FirstChild("Dialog"); if (dlgNode) { NppParameters *pNppParam = NppParameters::getInstance(); dlgNode = searchDlgNode(dlgNode, "Find"); if (dlgNode) { const char *titre1 = (dlgNode->ToElement())->Attribute("titleFind"); const char *titre2 = (dlgNode->ToElement())->Attribute("titleReplace"); const char *titre3 = (dlgNode->ToElement())->Attribute("titleFindInFiles"); const char *titre4 = (dlgNode->ToElement())->Attribute("titleMark"); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); if (titre1 && titre1[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre1, _nativeLangEncoding); pNppParam->getFindDlgTabTitiles()._find = nameW; findReplaceDlg.changeTabName(FIND_DLG, pNppParam->getFindDlgTabTitiles()._find.c_str()); } if (titre2 && titre2[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre2, _nativeLangEncoding); pNppParam->getFindDlgTabTitiles()._replace = nameW; findReplaceDlg.changeTabName(REPLACE_DLG, pNppParam->getFindDlgTabTitiles()._replace.c_str()); } if (titre3 && titre3[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre3, _nativeLangEncoding); pNppParam->getFindDlgTabTitiles()._findInFiles = nameW; findReplaceDlg.changeTabName(FINDINFILES_DLG, pNppParam->getFindDlgTabTitiles()._findInFiles.c_str()); } if (titre4 && titre4[0]) { basic_string<wchar_t> nameW = wmc->char2wchar(titre4, _nativeLangEncoding); pNppParam->getFindDlgTabTitiles()._mark = nameW; findReplaceDlg.changeTabName(MARK_DLG, pNppParam->getFindDlgTabTitiles()._mark.c_str()); } } } } changeDlgLang(findReplaceDlg.getHSelf(), "Find"); }
bool WindowsDlg::changeDlgLang() { if (!_dlgNode) return false; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); int nativeLangEncoding = CP_ACP; TiXmlDeclarationA *declaration = _dlgNode->GetDocument()->FirstChild()->ToDeclaration(); if (declaration) { const char * encodingStr = declaration->Encoding(); EncodingMapper *em = EncodingMapper::getInstance(); nativeLangEncoding = em->getEncodingFromString(encodingStr); } // Set Title const char *titre = (_dlgNode->ToElement())->Attribute("title"); if (titre && titre[0]) { const wchar_t *nameW = wmc->char2wchar(titre, nativeLangEncoding); ::SetWindowText(_hSelf, nameW); } // Set the text of child control for (TiXmlNodeA *childNode = _dlgNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { HWND hItem = ::GetDlgItem(_hSelf, id); if (hItem) { const wchar_t *nameW = wmc->char2wchar(name, nativeLangEncoding); ::SetWindowText(hItem, nameW); } } } return true; }
generic_string NativeLangSpeaker::getAttrNameStr(const TCHAR *defaultStr, const char *nodeL1Name, const char *nodeL2Name) const { if (!_nativeLangA) return defaultStr; TiXmlNodeA *targetNode = _nativeLangA->FirstChild(nodeL1Name); if (!targetNode) return defaultStr; if (nodeL2Name) targetNode = targetNode->FirstChild(nodeL2Name); if (!targetNode) return defaultStr; const char *name = (targetNode->ToElement())->Attribute("name"); if (name && name[0]) { WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); return wmc->char2wchar(name, _nativeLangEncoding); } return defaultStr; }
generic_string NativeLangSpeaker::getProjectPanelLangMenuStr(const char * nodeName, int cmdID, const TCHAR *defaultStr) const { if (!_nativeLangA) return defaultStr; TiXmlNodeA *targetNode = _nativeLangA->FirstChild("ProjectManager"); if (!targetNode) return defaultStr; targetNode = targetNode->FirstChild("Menus"); if (!targetNode) return defaultStr; targetNode = targetNode->FirstChild(nodeName); if (!targetNode) return defaultStr; const char *name = NULL; for (TiXmlNodeA *childNode = targetNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *idStr = element->Attribute("id", &id); if (idStr && id == cmdID) { name = element->Attribute("name"); break; } } if (name && name[0]) { #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); return wmc->char2wchar(name, _nativeLangEncoding); #else return name; #endif } return defaultStr; }
generic_string NativeLangSpeaker::getLocalizedStrFromID(const char *strID, const generic_string& defaultString) const { if (not _nativeLangA) return defaultString; if (not strID) return defaultString; TiXmlNodeA *node = _nativeLangA->FirstChild("MiscStrings"); if (not node) return defaultString; node = node->FirstChild(strID); if (not node) return defaultString; TiXmlElementA *element = node->ToElement(); const char *value = element->Attribute("value"); if (not value) return defaultString; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); return wmc->char2wchar(value, _nativeLangEncoding); }
generic_string NativeLangSpeaker::getProjectPanelLangStr(const char *nodeName, const TCHAR *defaultStr) const { if (!_nativeLangA) return defaultStr; TiXmlNodeA *targetNode = _nativeLangA->FirstChild("ProjectManager"); if (!targetNode) return defaultStr; targetNode = targetNode->FirstChild(nodeName); if (!targetNode) return defaultStr; // Set Title const char *name = (targetNode->ToElement())->Attribute("name"); if (name && name[0]) { #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); return wmc->char2wchar(name, _nativeLangEncoding); #else return name; #endif } return defaultStr; }
void NativeLangSpeaker::changeLangTabContextMenu(HMENU hCM) { if (nullptr != _nativeLangA) { TiXmlNodeA *tabBarMenu = _nativeLangA->FirstChild("Menu"); if (tabBarMenu) { tabBarMenu = tabBarMenu->FirstChild("TabBar"); if (tabBarMenu) { WcharMbcsConvertor* wmc = WcharMbcsConvertor::getInstance(); int nbCMItems = sizeof(tabContextMenuItemPos)/sizeof(int); for (TiXmlNodeA *childNode = tabBarMenu->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int index; const char *indexStr = element->Attribute("CMID", &index); if (!indexStr || (index < 0 || index >= nbCMItems-1)) continue; int pos = tabContextMenuItemPos[index]; const char *pName = element->Attribute("name"); if (pName) { const wchar_t *pNameW = wmc->char2wchar(pName, _nativeLangEncoding); int cmdID = ::GetMenuItemID(hCM, pos); ::ModifyMenu(hCM, pos, MF_BYPOSITION, cmdID, pNameW); } } } } } }
INT_PTR CALLBACK AboutDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : { HWND compileDateHandle = ::GetDlgItem(_hSelf, IDC_BUILD_DATETIME); generic_string buildTime = TEXT("Build time : "); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); buildTime += wmc->char2wchar(__DATE__, CP_ACP); buildTime += TEXT(" - "); buildTime += wmc->char2wchar(__TIME__, CP_ACP); ::SendMessage(compileDateHandle, WM_SETTEXT, 0, (LPARAM)buildTime.c_str()); ::EnableWindow(compileDateHandle, FALSE); HWND licenceEditHandle = ::GetDlgItem(_hSelf, IDC_LICENCE_EDIT); ::SendMessage(licenceEditHandle, WM_SETTEXT, 0, (LPARAM)LICENCE_TXT); _emailLink.init(_hInst, _hSelf); //_emailLink.create(::GetDlgItem(_hSelf, IDC_AUTHOR_NAME), TEXT("mailto:[email protected]")); _emailLink.create(::GetDlgItem(_hSelf, IDC_AUTHOR_NAME), TEXT("https://notepad-plus-plus.org/contributors")); _pageLink.init(_hInst, _hSelf); _pageLink.create(::GetDlgItem(_hSelf, IDC_HOME_ADDR), TEXT("https://notepad-plus-plus.org/")); getClientRect(_rc); NppParameters *pNppParam = NppParameters::getInstance(); ETDTProc enableDlgTheme = (ETDTProc)pNppParam->getEnableThemeDlgTexture(); if (enableDlgTheme) { enableDlgTheme(_hSelf, ETDT_ENABLETAB); redraw(); } return TRUE; } case WM_DRAWITEM : { HICON hIcon = (HICON)::LoadImage(_hInst, MAKEINTRESOURCE(IDI_CHAMELEON), IMAGE_ICON, 64, 64, LR_DEFAULTSIZE); //HICON hIcon = (HICON)::LoadImage(_hInst, MAKEINTRESOURCE(IDI_JESUISCHARLIE), IMAGE_ICON, 64, 64, LR_DEFAULTSIZE); DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam; ::DrawIconEx(pdis->hDC, 0, 0, hIcon, 64, 64, 0, NULL, DI_NORMAL); return TRUE; } case WM_COMMAND : { switch (wParam) { case IDCANCEL : case IDOK : display(false); return TRUE; default : break; } } case WM_DESTROY : { return TRUE; } } return FALSE; }
void NativeLangSpeaker::changeUserDefineLang(UserDefineDialog *userDefineDlg) { if (!_nativeLangA) return; TiXmlNodeA *userDefineDlgNode = _nativeLangA->FirstChild("Dialog"); if (!userDefineDlgNode) return; userDefineDlgNode = userDefineDlgNode->FirstChild("UserDefine"); if (!userDefineDlgNode) return; HWND hDlg = userDefineDlg->getHSelf(); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); // Set Title const char *titre = (userDefineDlgNode->ToElement())->Attribute("title"); if (titre && titre[0]) { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); ::SetWindowText(hDlg, nameW); } // for each control const int nbControl = 9; const char *translatedText[nbControl]; for (int i = 0 ; i < nbControl ; ++i) translatedText[i] = NULL; for (TiXmlNodeA *childNode = userDefineDlgNode->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { if (id > 30) { HWND hItem = ::GetDlgItem(hDlg, id); if (hItem) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::SetWindowText(hItem, nameW); } } else { switch(id) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: translatedText[id] = name; break; } } } } const int nbDlg = 4; HWND hDlgArrary[nbDlg]; hDlgArrary[0] = userDefineDlg->getFolderHandle(); hDlgArrary[1] = userDefineDlg->getKeywordsHandle(); hDlgArrary[2] = userDefineDlg->getCommentHandle(); hDlgArrary[3] = userDefineDlg->getSymbolHandle(); const char nodeNameArray[nbDlg][16] = {"Folder", "Keywords", "Comment", "Operator"}; for (int i = 0 ; i < nbDlg ; ++i) { TiXmlNodeA *node = userDefineDlgNode->FirstChild(nodeNameArray[i]); if (node) { // Set Title titre = (node->ToElement())->Attribute("title"); if (titre &&titre[0]) { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); userDefineDlg->setTabName(i, nameW); } for (TiXmlNodeA *childNode = node->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; const char *sentinel = element->Attribute("id", &id); const char *name = element->Attribute("name"); if (sentinel && (name && name[0])) { HWND hItem = ::GetDlgItem(hDlgArrary[i], id); if (hItem) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::SetWindowText(hItem, nameW); } } } } } }
void NativeLangSpeaker::changeMenuLang(HMENU menuHandle, generic_string & pluginsTrans, generic_string & windowTrans) { if (nullptr == _nativeLangA) return; TiXmlNodeA *mainMenu = _nativeLangA->FirstChild("Menu"); if (nullptr == mainMenu) return; mainMenu = mainMenu->FirstChild("Main"); if (nullptr == mainMenu) return; TiXmlNodeA *entriesRoot = mainMenu->FirstChild("Entries"); if (nullptr == entriesRoot) return; const char* idName = nullptr; WcharMbcsConvertor* wmc = WcharMbcsConvertor::getInstance(); for (TiXmlNodeA *childNode = entriesRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); const char *menuIdStr = element->Attribute("menuId"); if (menuIdStr) { MenuPosition & menuPos = getMenuPosition(menuIdStr); if (menuPos._x != -1) { const char *name = element->Attribute("name"); const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::ModifyMenu(menuHandle, menuPos._x, MF_BYPOSITION, 0, nameW); } } else { idName = element->Attribute("idName"); if (idName) { const char *name = element->Attribute("name"); if (!strcmp(idName, "Plugins")) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); pluginsTrans = nameW; } else if (!strcmp(idName, "Window")) { const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); windowTrans = nameW; } } } } TiXmlNodeA *menuCommandsRoot = mainMenu->FirstChild("Commands"); for (TiXmlNodeA *childNode = menuCommandsRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int id; element->Attribute("id", &id); const char *name = element->Attribute("name"); const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::ModifyMenu(menuHandle, id, MF_BYCOMMAND, id, nameW); } TiXmlNodeA *subEntriesRoot = mainMenu->FirstChild("SubEntries"); for (TiXmlNodeA *childNode = subEntriesRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA* element = childNode->ToElement(); //const char *xStr = element->Attribute("posX", &x); //const char *yStr = element->Attribute("posY", &y); const char* subMenuIdStr = element->Attribute("subMenuId"); const char* name = element->Attribute("name"); if (nullptr == subMenuIdStr or nullptr == name) continue; MenuPosition& menuPos = getMenuPosition(subMenuIdStr); int x = menuPos._x; int y = menuPos._y; int z = menuPos._z; HMENU hSubMenu = ::GetSubMenu(menuHandle, x); if (!hSubMenu) continue; HMENU hSubMenu2 = ::GetSubMenu(hSubMenu, y); if (!hSubMenu2) continue; HMENU hMenu = hSubMenu; int pos = y; //const char *zStr = element->Attribute("posZ", &z); if (z != -1) { HMENU hSubMenu3 = ::GetSubMenu(hSubMenu2, z); if (!hSubMenu3) continue; hMenu = hSubMenu2; pos = z; } const wchar_t *nameW = wmc->char2wchar(name, _nativeLangEncoding); ::ModifyMenu(hMenu, pos, MF_BYPOSITION, 0, nameW); } }
void SmartHighlighter::highlightView(ScintillaEditView * pHighlightView) { // Clear marks pHighlightView->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_SMART); // If nothing selected, dont mark anything if (pHighlightView->execute(SCI_GETSELECTIONEMPTY) == 1) return; auto curPos = pHighlightView->execute(SCI_GETCURRENTPOS); auto wordStart = pHighlightView->execute(SCI_WORDSTARTPOSITION, curPos, true); auto wordEnd = pHighlightView->execute(SCI_WORDENDPOSITION, wordStart, true); auto range = pHighlightView->getSelection(); // Make sure the "word" positions match the current selection if (wordStart == wordEnd || wordStart != range.cpMin || wordEnd != range.cpMax) return; int textlen = range.cpMax - range.cpMin + 1; char * text2Find = new char[textlen]; pHighlightView->getSelectedText(text2Find, textlen, false); //do not expand selection (false) // save target locations for other search functions auto originalStartPos = pHighlightView->execute(SCI_GETTARGETSTART); auto originalEndPos = pHighlightView->execute(SCI_GETTARGETEND); // Get the range of text visible and highlight everything in it auto firstLine = static_cast<int>(pHighlightView->execute(SCI_GETFIRSTVISIBLELINE)); auto nbLineOnScreen = pHighlightView->execute(SCI_LINESONSCREEN); auto nrLines = min(nbLineOnScreen, MAXLINEHIGHLIGHT ) + 1; auto lastLine = firstLine + nrLines; int startPos = 0; int endPos = 0; auto currentLine = firstLine; int prevDocLineChecked = -1; //invalid start const NppGUI & nppGUI = NppParameters::getInstance()->getNppGUI(); FindOption fo; fo._isMatchCase = nppGUI._smartHiliteCaseSensitive; fo._isWholeWord = true; const TCHAR * searchText = NULL; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); UINT cp = static_cast<UINT>(pHighlightView->execute(SCI_GETCODEPAGE)); const TCHAR * text2FindW = wmc->char2wchar(text2Find, cp); searchText = text2FindW; for(; currentLine < lastLine; ++currentLine) { int docLine = static_cast<int>(pHighlightView->execute(SCI_DOCLINEFROMVISIBLE, currentLine)); if (docLine == prevDocLineChecked) continue; //still on same line (wordwrap) prevDocLineChecked = docLine; startPos = static_cast<int>(pHighlightView->execute(SCI_POSITIONFROMLINE, docLine)); endPos = static_cast<int>(pHighlightView->execute(SCI_POSITIONFROMLINE, docLine + 1)); FindReplaceInfo frInfo; frInfo._txt2find = searchText; frInfo._startRange = startPos; frInfo._endRange = endPos; if (endPos == -1) { //past EOF frInfo._endRange = pHighlightView->getCurrentDocLen() - 1; _pFRDlg->processRange(ProcessMarkAll_2, frInfo, NULL, &fo); break; } else { _pFRDlg->processRange(ProcessMarkAll_2, frInfo, NULL, &fo); } } // restore the original targets to avoid conflicts with the search/replace functions pHighlightView->execute(SCI_SETTARGETRANGE, originalStartPos, originalEndPos); delete[] text2Find; }
void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdLineParams *cmdLineParams) { time_t timestampBegin = 0; if (cmdLineParams->_showLoadingTime) timestampBegin = time(NULL); Window::init(hInst, parent); WNDCLASS nppClass; nppClass.style = CS_BYTEALIGNWINDOW | CS_DBLCLKS; nppClass.lpfnWndProc = Notepad_plus_Proc; nppClass.cbClsExtra = 0; nppClass.cbWndExtra = 0; nppClass.hInstance = _hInst; nppClass.hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(IDI_M30ICON)); nppClass.hCursor = ::LoadCursor(NULL, IDC_ARROW); nppClass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_MENU)); nppClass.lpszMenuName = MAKEINTRESOURCE(IDR_M30_MENU); nppClass.lpszClassName = _className; _isPrelaunch = cmdLineParams->_isPreLaunch; if (!::RegisterClass(&nppClass)) { throw std::runtime_error("Notepad_plus_Window::init : RegisterClass() function failed"); } NppParameters *pNppParams = NppParameters::getInstance(); NppGUI & nppGUI = const_cast<NppGUI &>(pNppParams->getNppGUI()); if (cmdLineParams->_isNoPlugin) _notepad_plus_plus_core._pluginsManager.disable(); _hSelf = ::CreateWindowEx( WS_EX_ACCEPTFILES | (_notepad_plus_plus_core._nativeLangSpeaker.isRTL()?WS_EX_LAYOUTRTL:0), _className, TEXT("Notepad++"), (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN), // CreateWindowEx bug : set all 0 to walk around the pb 0, 0, 0, 0, _hParent, nullptr, _hInst, (LPVOID) this); // pass the ptr of this instantiated object // for retrieve it in Notepad_plus_Proc from // the CREATESTRUCT.lpCreateParams afterward. if (NULL == _hSelf) throw std::runtime_error("Notepad_plus_Window::init : CreateWindowEx() function return null"); PaintLocker paintLocker{_hSelf}; _notepad_plus_plus_core.staticCheckMenuAndTB(); gNppHWND = _hSelf; if (cmdLineParams->isPointValid()) { ::MoveWindow(_hSelf, cmdLineParams->_point.x, cmdLineParams->_point.y, nppGUI._appPos.right, nppGUI._appPos.bottom, TRUE); } else { WINDOWPLACEMENT posInfo; posInfo.length = sizeof(WINDOWPLACEMENT); posInfo.flags = 0; if (_isPrelaunch) posInfo.showCmd = SW_HIDE; else posInfo.showCmd = nppGUI._isMaximized ? SW_SHOWMAXIMIZED : SW_SHOWNORMAL; posInfo.ptMinPosition.x = (LONG)-1; posInfo.ptMinPosition.y = (LONG)-1; posInfo.ptMaxPosition.x = (LONG)-1; posInfo.ptMaxPosition.y = (LONG)-1; posInfo.rcNormalPosition.left = nppGUI._appPos.left; posInfo.rcNormalPosition.top = nppGUI._appPos.top; posInfo.rcNormalPosition.bottom = nppGUI._appPos.top + nppGUI._appPos.bottom; posInfo.rcNormalPosition.right = nppGUI._appPos.left + nppGUI._appPos.right; //SetWindowPlacement will take care of situations, where saved position was in no longer available monitor ::SetWindowPlacement(_hSelf,&posInfo); } if ((nppGUI._tabStatus & TAB_MULTILINE) != 0) ::SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_DRAWTABBAR_MULTILINE, 0); if (!nppGUI._menuBarShow) ::SetMenu(_hSelf, NULL); if (cmdLineParams->_isNoTab || (nppGUI._tabStatus & TAB_HIDE)) { const int tabStatusOld = nppGUI._tabStatus; ::SendMessage(_hSelf, NPPM_HIDETABBAR, 0, TRUE); if (cmdLineParams->_isNoTab) { // Restore old settings when tab bar has been hidden from tab bar. nppGUI._tabStatus = tabStatusOld; } } if (cmdLineParams->_alwaysOnTop) ::SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_ALWAYSONTOP, 0); nppGUI._isCmdlineNosessionActivated = cmdLineParams->_isNoSession; if (nppGUI._rememberLastSession && !cmdLineParams->_isNoSession) _notepad_plus_plus_core.loadLastSession(); if (not cmdLineParams->_isPreLaunch) { if (cmdLineParams->isPointValid()) ::ShowWindow(_hSelf, SW_SHOW); else ::ShowWindow(_hSelf, nppGUI._isMaximized ? SW_MAXIMIZE : SW_SHOW); } else { _notepad_plus_plus_core._pTrayIco = new trayIconControler(_hSelf, IDI_M30ICON, IDC_MINIMIZED_TRAY, ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON)), TEXT("")); _notepad_plus_plus_core._pTrayIco->doTrayIcon(ADD); } if (cmdLine) _notepad_plus_plus_core.loadCommandlineParams(cmdLine, cmdLineParams); std::vector<generic_string> fileNames; std::vector<generic_string> patterns; patterns.push_back(TEXT("*.xml")); generic_string nppDir = pNppParams->getNppPath(); LocalizationSwitcher & localizationSwitcher = pNppParams->getLocalizationSwitcher(); std::wstring localizationDir = nppDir; PathAppend(localizationDir, TEXT("localization\\")); _notepad_plus_plus_core.getMatchedFileNames(localizationDir.c_str(), patterns, fileNames, false, false); for (size_t i = 0, len = fileNames.size(); i < len; ++i) localizationSwitcher.addLanguageFromXml(fileNames[i].c_str()); fileNames.clear(); ThemeSwitcher & themeSwitcher = pNppParams->getThemeSwitcher(); // Get themes from both npp install themes dir and app data themes dir with the per user // overriding default themes of the same name. generic_string themeDir; if (pNppParams->getAppDataNppDir() && pNppParams->getAppDataNppDir()[0]) { themeDir = pNppParams->getAppDataNppDir(); PathAppend(themeDir, TEXT("themes\\")); _notepad_plus_plus_core.getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false); for (size_t i = 0, len = fileNames.size() ; i < len ; ++i) { themeSwitcher.addThemeFromXml(fileNames[i].c_str()); } } fileNames.clear(); themeDir.clear(); themeDir = nppDir.c_str(); // <- should use the pointer to avoid the constructor of copy PathAppend(themeDir, TEXT("themes\\")); _notepad_plus_plus_core.getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false); for (size_t i = 0, len = fileNames.size(); i < len ; ++i) { generic_string themeName( themeSwitcher.getThemeFromXmlFileName(fileNames[i].c_str()) ); if (! themeSwitcher.themeNameExists(themeName.c_str()) ) { themeSwitcher.addThemeFromXml(fileNames[i].c_str()); } } for (size_t i = 0, len = _notepad_plus_plus_core._internalFuncIDs.size() ; i < len ; ++i) ::SendMessage(_hSelf, WM_COMMAND, _notepad_plus_plus_core._internalFuncIDs[i], 0); // Notify plugins that Notepad++ is ready SCNotification scnN; scnN.nmhdr.code = NPPN_READY; scnN.nmhdr.hwndFrom = _hSelf; scnN.nmhdr.idFrom = 0; _notepad_plus_plus_core._pluginsManager.notify(&scnN); if (!cmdLineParams->_easterEggName.empty()) { if (cmdLineParams->_quoteType == 0) // Easter Egg Name { int iQuote = _notepad_plus_plus_core.getQuoteIndexFrom(cmdLineParams->_easterEggName.c_str()); if (iQuote != -1) { _notepad_plus_plus_core.showQuoteFromIndex(iQuote); } } else if (cmdLineParams->_quoteType == 1) // command line quote { _userQuote = cmdLineParams->_easterEggName; _quoteParams.reset(); _quoteParams._quote = _userQuote.c_str(); _quoteParams._quoter = TEXT("Anonymous #999"); _quoteParams._shouldBeTrolling = false; _quoteParams._lang = cmdLineParams->_langType; if (cmdLineParams->_ghostTypingSpeed == 1) _quoteParams._speed = QuoteParams::slow; else if (cmdLineParams->_ghostTypingSpeed == 2) _quoteParams._speed = QuoteParams::rapid; else if (cmdLineParams->_ghostTypingSpeed == 3) _quoteParams._speed = QuoteParams::speedOfLight; _notepad_plus_plus_core.showQuote(&_quoteParams); } else if (cmdLineParams->_quoteType == 2) // content drom file { if (::PathFileExists(cmdLineParams->_easterEggName.c_str())) { std::string content = getFileContent(cmdLineParams->_easterEggName.c_str()); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); _userQuote = wmc->char2wchar(content.c_str(), SC_CP_UTF8); if (!_userQuote.empty()) { _quoteParams.reset(); _quoteParams._quote = _userQuote.c_str(); _quoteParams._quoter = TEXT("Anonymous #999"); _quoteParams._shouldBeTrolling = false; _quoteParams._lang = cmdLineParams->_langType; if (cmdLineParams->_ghostTypingSpeed == 1) _quoteParams._speed = QuoteParams::slow; else if (cmdLineParams->_ghostTypingSpeed == 2) _quoteParams._speed = QuoteParams::rapid; else if (cmdLineParams->_ghostTypingSpeed == 3) _quoteParams._speed = QuoteParams::speedOfLight; _notepad_plus_plus_core.showQuote(&_quoteParams); } } } } if (cmdLineParams->_showLoadingTime) { time_t timestampEnd = time(NULL); double loadTime = difftime(timestampEnd, timestampBegin); char dest[256]; sprintf(dest, "Loading time : %.0lf seconds", loadTime); ::MessageBoxA(NULL, dest, "", MB_OK); } bool isSnapshotMode = nppGUI.isSnapshotMode(); if (isSnapshotMode) { _notepad_plus_plus_core.checkModifiedDocument(false); // Lauch backup task _notepad_plus_plus_core.launchDocumentBackupTask(); } // Make this call later to take effect ::SendMessage(_hSelf, NPPM_INTERNAL_SETWORDCHARS, 0, 0); if (pNppParams->doFunctionListExport()) ::SendMessage(_hSelf, NPPM_INTERNAL_EXPORTFUNCLISTANDQUIT, 0, 0); if (pNppParams->doPrintAndExit()) ::SendMessage(_hSelf, NPPM_INTERNAL_PRNTANDQUIT, 0, 0); }
int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector<generic_string> & dll2Remove) { const TCHAR *pluginFileName = ::PathFindFileName(pluginFilePath); if (isInLoadedDlls(pluginFileName)) return 0; NppParameters * nppParams = NppParameters::getInstance(); PluginInfo *pi = new PluginInfo; try { pi->_moduleName = pluginFileName; if (GetBinaryArchitectureType(pluginFilePath) != ARCH_TYPE) throw generic_string(ARCH_ERR_MSG); pi->_hLib = ::LoadLibrary(pluginFilePath); if (!pi->_hLib) { generic_string lastErrorMsg = GetLastErrorAsString(); if (lastErrorMsg.empty()) throw generic_string(TEXT("Load Library has failed.\nChanging the project's \"Runtime Library\" setting to \"Multi-threaded(/MT)\" might solve this problem.")); else throw generic_string(lastErrorMsg.c_str()); } pi->_pFuncIsUnicode = (PFUNCISUNICODE)GetProcAddress(pi->_hLib, "isUnicode"); if (!pi->_pFuncIsUnicode || !pi->_pFuncIsUnicode()) throw generic_string(TEXT("This ANSI plugin is not compatible with your Unicode Notepad++.")); pi->_pFuncSetInfo = (PFUNCSETINFO)GetProcAddress(pi->_hLib, "setInfo"); if (!pi->_pFuncSetInfo) throw generic_string(TEXT("Missing \"setInfo\" function")); pi->_pFuncGetName = (PFUNCGETNAME)GetProcAddress(pi->_hLib, "getName"); if (!pi->_pFuncGetName) throw generic_string(TEXT("Missing \"getName\" function")); pi->_funcName = pi->_pFuncGetName(); pi->_pBeNotified = (PBENOTIFIED)GetProcAddress(pi->_hLib, "beNotified"); if (!pi->_pBeNotified) throw generic_string(TEXT("Missing \"beNotified\" function")); pi->_pMessageProc = (PMESSAGEPROC)GetProcAddress(pi->_hLib, "messageProc"); if (!pi->_pMessageProc) throw generic_string(TEXT("Missing \"messageProc\" function")); pi->_pFuncSetInfo(_nppData); pi->_pFuncGetFuncsArray = (PFUNCGETFUNCSARRAY)GetProcAddress(pi->_hLib, "getFuncsArray"); if (!pi->_pFuncGetFuncsArray) throw generic_string(TEXT("Missing \"getFuncsArray\" function")); pi->_funcItems = pi->_pFuncGetFuncsArray(&pi->_nbFuncItem); if ((!pi->_funcItems) || (pi->_nbFuncItem <= 0)) throw generic_string(TEXT("Missing \"FuncItems\" array, or the nb of Function Item is not set correctly")); pi->_pluginMenu = ::CreateMenu(); GetLexerCountFn GetLexerCount = (GetLexerCountFn)::GetProcAddress(pi->_hLib, "GetLexerCount"); // it's a lexer plugin if (GetLexerCount) { GetLexerNameFn GetLexerName = (GetLexerNameFn)::GetProcAddress(pi->_hLib, "GetLexerName"); if (!GetLexerName) throw generic_string(TEXT("Loading GetLexerName function failed.")); GetLexerStatusTextFn GetLexerStatusText = (GetLexerStatusTextFn)::GetProcAddress(pi->_hLib, "GetLexerStatusText"); if (!GetLexerStatusText) throw generic_string(TEXT("Loading GetLexerStatusText function failed.")); // Assign a buffer for the lexer name. char lexName[MAX_EXTERNAL_LEXER_NAME_LEN]; lexName[0] = '\0'; TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN]; lexDesc[0] = '\0'; int numLexers = GetLexerCount(); ExternalLangContainer *containers[30]; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); for (int x = 0; x < numLexers; ++x) { GetLexerName(x, lexName, MAX_EXTERNAL_LEXER_NAME_LEN); GetLexerStatusText(x, lexDesc, MAX_EXTERNAL_LEXER_DESC_LEN); const TCHAR *pLexerName = wmc->char2wchar(lexName, CP_ACP); if (!nppParams->isExistingExternalLangName(pLexerName) && nppParams->ExternalLangHasRoom()) containers[x] = new ExternalLangContainer(pLexerName, lexDesc); else containers[x] = NULL; } TCHAR xmlPath[MAX_PATH]; lstrcpy(xmlPath, nppParams->getNppPath().c_str()); PathAppend(xmlPath, TEXT("plugins\\Config")); PathAppend(xmlPath, pi->_moduleName.c_str()); PathRemoveExtension(xmlPath); PathAddExtension(xmlPath, TEXT(".xml")); if (!PathFileExists(xmlPath)) { lstrcpyn(xmlPath, TEXT("\0"), MAX_PATH ); lstrcpy(xmlPath, nppParams->getAppDataNppDir() ); PathAppend(xmlPath, TEXT("plugins\\Config")); PathAppend(xmlPath, pi->_moduleName.c_str()); PathRemoveExtension( xmlPath ); PathAddExtension( xmlPath, TEXT(".xml") ); if (! PathFileExists( xmlPath ) ) { throw generic_string(generic_string(xmlPath) + TEXT(" is missing.")); } } TiXmlDocument *pXmlDoc = new TiXmlDocument(xmlPath); if (!pXmlDoc->LoadFile()) { delete pXmlDoc; pXmlDoc = NULL; throw generic_string(generic_string(xmlPath) + TEXT(" failed to load.")); } for (int x = 0; x < numLexers; ++x) // postpone adding in case the xml is missing/corrupt { if (containers[x] != NULL) nppParams->addExternalLangToEnd(containers[x]); } nppParams->getExternalLexerFromXmlTree(pXmlDoc); nppParams->getExternalLexerDoc()->push_back(pXmlDoc); const char *pDllName = wmc->wchar2char(pluginFilePath, CP_ACP); ::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, reinterpret_cast<LPARAM>(pDllName)); } addInLoadedDlls(pluginFilePath, pluginFileName); _pluginInfos.push_back(pi); return static_cast<int32_t>(_pluginInfos.size() - 1); } catch (std::exception& e) { ::MessageBoxA(NULL, e.what(), "Exception", MB_OK); return -1; } catch (generic_string s) { s += TEXT("\n\n"); s += pluginFileName; s += USERMSG; if (::MessageBox(NULL, s.c_str(), pluginFilePath, MB_YESNO) == IDYES) { dll2Remove.push_back(pluginFilePath); } delete pi; return -1; } catch (...) { generic_string msg = TEXT("Failed to load"); msg += TEXT("\n\n"); msg += pluginFileName; msg += USERMSG; if (::MessageBox(NULL, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES) { dll2Remove.push_back(pluginFilePath); } delete pi; return -1; } }
BOOL CALLBACK AboutDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : { HWND compileDateHandle = ::GetDlgItem(_hSelf, IDC_BUILD_DATETIME); generic_string buildTime = TEXT("Build time : "); #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); buildTime += wmc->char2wchar(__DATE__, CP_ACP); buildTime += TEXT(" - "); buildTime += wmc->char2wchar(__TIME__, CP_ACP); #else buildTime += __DATE__; buildTime += TEXT(" - "); buildTime += __TIME__; #endif ::SendMessage(compileDateHandle, WM_SETTEXT, 0, (LPARAM)buildTime.c_str()); ::EnableWindow(compileDateHandle, FALSE); HWND licenceEditHandle = ::GetDlgItem(_hSelf, IDC_LICENCE_EDIT); ::SendMessage(licenceEditHandle, WM_SETTEXT, 0, (LPARAM)LICENCE_TXT); _emailLink.init(_hInst, _hSelf); _emailLink.create(::GetDlgItem(_hSelf, IDC_AUTHOR_NAME), TEXT("mailto:[email protected]")); _pageLink.init(_hInst, _hSelf); _pageLink.create(::GetDlgItem(_hSelf, IDC_HOME_ADDR), TEXT("http://notepad-plus.sourceforge.net/")); //_onLineHelp.init(_hInst, _hSelf); //_onLineHelp.create(::GetDlgItem(_hSelf, IDC_ONLINEHELP_ADDR), TEXT("http://notepad-plus.sourceforge.net/uk/generalFAQ.php")); getClientRect(_rc); NppParameters *pNppParam = NppParameters::getInstance(); ETDTProc enableDlgTheme = (ETDTProc)pNppParam->getEnableThemeDlgTexture(); if (enableDlgTheme) { enableDlgTheme(_hSelf, ETDT_ENABLETAB); redraw(); } return TRUE; } case WM_DRAWITEM : { HICON hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON)); DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam; ::DrawIcon(pdis->hDC, 0, 0, hIcon); return TRUE; } case WM_COMMAND : { switch (wParam) { case IDCANCEL : case IDOK : display(false); return TRUE; default : break; } } case WM_DESTROY : { return TRUE; } } return FALSE; }
INT_PTR CALLBACK DebugInfoDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM /*lParam*/) { switch (message) { case WM_INITDIALOG: { // Notepad++ version _debugInfoStr = NOTEPAD_PLUS_VERSION; _debugInfoStr += TEXT("\r\n"); // Build time _debugInfoStr += TEXT("Build time : "); generic_string buildTime; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); buildTime += wmc->char2wchar(__DATE__, CP_ACP); buildTime += TEXT(" - "); buildTime += wmc->char2wchar(__TIME__, CP_ACP); _debugInfoStr += buildTime; _debugInfoStr += TEXT("\r\n"); // Binary path _debugInfoStr += TEXT("Path : "); TCHAR nppFullPath[MAX_PATH]; ::GetModuleFileName(NULL, nppFullPath, MAX_PATH); _debugInfoStr += nppFullPath; _debugInfoStr += TEXT("\r\n"); // Administrator mode _debugInfoStr += TEXT("Admin mode : "); _debugInfoStr += (_isAdmin ? TEXT("ON") : TEXT("OFF")); _debugInfoStr += TEXT("\r\n"); // local conf _debugInfoStr += TEXT("Local Conf mode : "); bool doLocalConf = (NppParameters::getInstance())->isLocal(); _debugInfoStr += (doLocalConf ? TEXT("ON") : TEXT("OFF")); _debugInfoStr += TEXT("\r\n"); // OS version _debugInfoStr += TEXT("OS : "); _debugInfoStr += (NppParameters::getInstance())->getWinVersionStr(); _debugInfoStr += TEXT("\r\n"); // Plugins _debugInfoStr += TEXT("Plugins : "); _debugInfoStr += _loadedPlugins.length() == 0 ? TEXT("none") : _loadedPlugins; _debugInfoStr += TEXT("\r\n"); ::SetDlgItemText(_hSelf, IDC_DEBUGINFO_EDIT, _debugInfoStr.c_str()); _copyToClipboardLink.init(_hInst, _hSelf); _copyToClipboardLink.create(::GetDlgItem(_hSelf, IDC_DEBUGINFO_COPYLINK), IDC_DEBUGINFO_COPYLINK); getClientRect(_rc); return TRUE; } case WM_COMMAND: { switch (wParam) { case IDCANCEL: case IDOK: display(false); return TRUE; case IDC_DEBUGINFO_COPYLINK: { if ((GetKeyState(VK_LBUTTON) & 0x100) != 0) { // Visual effect ::SendDlgItemMessage(_hSelf, IDC_DEBUGINFO_EDIT, EM_SETSEL, 0, _debugInfoStr.length() - 1); // Copy to clipboard str2Clipboard(_debugInfoStr, _hSelf); } return TRUE; } default: break; } } case WM_DESTROY: { return TRUE; } } return FALSE; }
void NativeLangSpeaker::changeShortcutLang() { if (!_nativeLangA) return; NppParameters * pNppParam = NppParameters::getInstance(); vector<CommandShortcut> & mainshortcuts = pNppParam->getUserShortcuts(); vector<ScintillaKeyMap> & scinshortcuts = pNppParam->getScintillaKeyList(); TiXmlNodeA *shortcuts = _nativeLangA->FirstChild("Shortcuts"); if (!shortcuts) return; shortcuts = shortcuts->FirstChild("Main"); if (!shortcuts) return; TiXmlNodeA *entriesRoot = shortcuts->FirstChild("Entries"); if (!entriesRoot) return; for (TiXmlNodeA *childNode = entriesRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int index, id; if (element->Attribute("index", &index) && element->Attribute("id", &id)) { if (index > -1 && static_cast<size_t>(index) < mainshortcuts.size()) //valid index only { const char *name = element->Attribute("name"); CommandShortcut & csc = mainshortcuts[index]; if (csc.getID() == (unsigned long)id) { WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const wchar_t * nameW = wmc->char2wchar(name, _nativeLangEncoding); csc.setName(nameW); } } } } //Scintilla shortcuts = _nativeLangA->FirstChild("Shortcuts"); if (!shortcuts) return; shortcuts = shortcuts->FirstChild("Scintilla"); if (!shortcuts) return; entriesRoot = shortcuts->FirstChild("Entries"); if (!entriesRoot) return; for (TiXmlNodeA *childNode = entriesRoot->FirstChildElement("Item"); childNode ; childNode = childNode->NextSibling("Item") ) { TiXmlElementA *element = childNode->ToElement(); int index; if (element->Attribute("index", &index)) { if (index > -1 && static_cast<size_t>(index) < scinshortcuts.size()) //valid index only { const char *name = element->Attribute("name"); ScintillaKeyMap & skm = scinshortcuts[index]; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const wchar_t * nameW = wmc->char2wchar(name, _nativeLangEncoding); skm.setName(nameW); } } } }
void NativeLangSpeaker::changePrefereceDlgLang(PreferenceDlg & preference) { auto currentSel = preference.getListSelectedIndex(); changeDlgLang(preference.getHSelf(), "Preference"); WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const size_t titreMaxSize = 128; char titre[titreMaxSize]; changeDlgLang(preference._barsDlg.getHSelf(), "Global", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Global"), nameW); } changeDlgLang(preference._marginsDlg.getHSelf(), "Scintillas", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Scintillas"), nameW); } changeDlgLang(preference._defaultNewDocDlg.getHSelf(), "NewDoc", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("NewDoc"), nameW); } changeDlgLang(preference._defaultDirectoryDlg.getHSelf(), "DefaultDir", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("DefaultDir"), nameW); } changeDlgLang(preference._recentFilesHistoryDlg.getHSelf(), "RecentFilesHistory", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("RecentFilesHistory"), nameW); } changeDlgLang(preference._fileAssocDlg.getHSelf(), "FileAssoc", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("FileAssoc"), nameW); } changeDlgLang(preference._langMenuDlg.getHSelf(), "Language", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Language"), nameW); } changeDlgLang(preference._highlighting.getHSelf(), "Highlighting", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Highlighting"), nameW); } changeDlgLang(preference._printSettingsDlg.getHSelf(), "Print", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Print"), nameW); } changeDlgLang(preference._settingsDlg.getHSelf(), "MISC", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("MISC"), nameW); } changeDlgLang(preference._backupDlg.getHSelf(), "Backup", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Backup"), nameW); } changeDlgLang(preference._autoCompletionDlg.getHSelf(), "AutoCompletion", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("AutoCompletion"), nameW); } changeDlgLang(preference._multiInstDlg.getHSelf(), "MultiInstance", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("MultiInstance"), nameW); } changeDlgLang(preference._delimiterSettingsDlg.getHSelf(), "Delimiter", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Delimiter"), nameW); } changeDlgLang(preference._settingsOnCloudDlg.getHSelf(), "Cloud", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("Cloud"), nameW); } changeDlgLang(preference._searchEngineDlg.getHSelf(), "SearchEngine", titre, titreMaxSize); if (titre[0] != '\0') { const wchar_t *nameW = wmc->char2wchar(titre, _nativeLangEncoding); preference.renameDialogTitle(TEXT("SearchEngine"), nameW); } preference.setListSelection(currentSel); }
int PluginsManager::loadPlugin(const generic_string& pluginFilePath, std::vector<generic_string> & dll2Remove) { PluginInfo *pi = new PluginInfo; try { pi->_moduleName = PathFindFileName(pluginFilePath.c_str()); pi->_hLib = ::LoadLibrary(pluginFilePath.c_str()); if (!pi->_hLib) throw generic_string(TEXT("Load Library is failed.\nMake \"Runtime Library\" setting of this project as \"Multi-threaded(/MT)\" may cure this problem.")); pi->_pFuncIsUnicode = (PFUNCISUNICODE)GetProcAddress(pi->_hLib, "isUnicode"); #ifdef UNICODE if (!pi->_pFuncIsUnicode || !pi->_pFuncIsUnicode()) throw generic_string(TEXT("This ANSI plugin is not compatible with your Unicode Notepad++.")); #else if (pi->_pFuncIsUnicode) throw generic_string(TEXT("This Unicode plugin is not compatible with your ANSI mode Notepad++.")); #endif pi->_pFuncSetInfo = (PFUNCSETINFO)GetProcAddress(pi->_hLib, "setInfo"); if (!pi->_pFuncSetInfo) throw generic_string(TEXT("Missing \"setInfo\" function")); pi->_pFuncGetName = (PFUNCGETNAME)GetProcAddress(pi->_hLib, "getName"); if (!pi->_pFuncGetName) throw generic_string(TEXT("Missing \"getName\" function")); pi->_pBeNotified = (PBENOTIFIED)GetProcAddress(pi->_hLib, "beNotified"); if (!pi->_pBeNotified) throw generic_string(TEXT("Missing \"beNotified\" function")); pi->_pMessageProc = (PMESSAGEPROC)GetProcAddress(pi->_hLib, "messageProc"); if (!pi->_pMessageProc) throw generic_string(TEXT("Missing \"messageProc\" function")); pi->_pFuncSetInfo(_nppData); pi->_pFuncGetFuncsArray = (PFUNCGETFUNCSARRAY)GetProcAddress(pi->_hLib, "getFuncsArray"); if (!pi->_pFuncGetFuncsArray) throw generic_string(TEXT("Missing \"getFuncsArray\" function")); pi->_funcItems = pi->_pFuncGetFuncsArray(&pi->_nbFuncItem); if ((!pi->_funcItems) || (pi->_nbFuncItem <= 0)) throw generic_string(TEXT("Missing \"FuncItems\" array, or the nb of Function Item is not set correctly")); pi->_pluginMenu = ::CreateMenu(); GetLexerCountFn GetLexerCount = (GetLexerCountFn)::GetProcAddress(pi->_hLib, "GetLexerCount"); // it's a lexer plugin if (GetLexerCount) { GetLexerNameFn GetLexerName = (GetLexerNameFn)::GetProcAddress(pi->_hLib, "GetLexerName"); if (!GetLexerName) throw generic_string(TEXT("Loading GetLexerName function failed.")); GetLexerStatusTextFn GetLexerStatusText = (GetLexerStatusTextFn)::GetProcAddress(pi->_hLib, "GetLexerStatusText"); if (!GetLexerStatusText) throw generic_string(TEXT("Loading GetLexerStatusText function failed.")); // Assign a buffer for the lexer name. char lexName[MAX_EXTERNAL_LEXER_NAME_LEN]; lexName[0] = '\0'; TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN]; lexDesc[0] = '\0'; int numLexers = GetLexerCount(); NppParameters * nppParams = NppParameters::getInstance(); ExternalLangContainer *containers[30]; #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); #endif for (int x = 0; x < numLexers; x++) { GetLexerName(x, lexName, MAX_EXTERNAL_LEXER_NAME_LEN); GetLexerStatusText(x, lexDesc, MAX_EXTERNAL_LEXER_DESC_LEN); #ifdef UNICODE const TCHAR *pLexerName = wmc->char2wchar(lexName, CP_ACP); #else const TCHAR *pLexerName = lexName; #endif if (!nppParams->isExistingExternalLangName(pLexerName) && nppParams->ExternalLangHasRoom()) containers[x] = new ExternalLangContainer(pLexerName, lexDesc); else containers[x] = NULL; } TCHAR xmlPath[MAX_PATH]; lstrcpy(xmlPath, nppParams->getNppPath().c_str()); PathAppend(xmlPath, TEXT("plugins\\Config")); PathAppend(xmlPath, pi->_moduleName.c_str()); PathRemoveExtension(xmlPath); PathAddExtension(xmlPath, TEXT(".xml")); if (!PathFileExists(xmlPath)) { memset(xmlPath, 0, MAX_PATH * sizeof(TCHAR)); lstrcpy(xmlPath, nppParams->getAppDataNppDir() ); PathAppend(xmlPath, TEXT("plugins\\Config")); PathAppend(xmlPath, pi->_moduleName.c_str()); PathRemoveExtension( xmlPath ); PathAddExtension( xmlPath, TEXT(".xml") ); if (! PathFileExists( xmlPath ) ) { throw generic_string(generic_string(xmlPath) + TEXT(" is missing.")); } } TiXmlDocument *_pXmlDoc = new TiXmlDocument(xmlPath); if (!_pXmlDoc->LoadFile()) { delete _pXmlDoc; _pXmlDoc = NULL; throw generic_string(generic_string(xmlPath) + TEXT(" failed to load.")); } for (int x = 0; x < numLexers; x++) // postpone adding in case the xml is missing/corrupt if (containers[x] != NULL) nppParams->addExternalLangToEnd(containers[x]); nppParams->getExternalLexerFromXmlTree(_pXmlDoc); nppParams->getExternalLexerDoc()->push_back(_pXmlDoc); #ifdef UNICODE const char *pDllName = wmc->wchar2char(pluginFilePath.c_str(), CP_ACP); #else const char *pDllName = pluginFilePath.c_str(); #endif ::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName); } _pluginInfos.push_back(pi); return (_pluginInfos.size() - 1); } catch(generic_string s) { s += TEXT("\n\n"); s += USERMSG; if (::MessageBox(NULL, s.c_str(), pluginFilePath.c_str(), MB_YESNO) == IDYES) { dll2Remove.push_back(pluginFilePath); } delete pi; return -1; } catch(...) { generic_string msg = TEXT("Fail loaded"); msg += TEXT("\n\n"); msg += USERMSG; if (::MessageBox(NULL, msg.c_str(), pluginFilePath.c_str(), MB_YESNO) == IDYES) { dll2Remove.push_back(pluginFilePath); } delete pi; return -1; } }
BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM) { switch (message) { case WM_COMMAND : { switch (wParam) { case IDCANCEL : display(false); return TRUE; case IDOK : { TCHAR cmd[MAX_PATH]; ::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH); _cmdLine = cmd; HINSTANCE hInst = run(_hParent); if (int(hInst) > 32) { addTextToCombo(_cmdLine.c_str()); display(false); } else { removeTextFromCombo(_cmdLine.c_str()); } return TRUE; } case IDC_BUTTON_SAVE : { std::vector<UserCommand> & theUserCmds = (NppParameters::getInstance())->getUserCommandList(); int nbCmd = theUserCmds.size(); int cmdID = ID_USER_CMD + nbCmd; TCHAR cmd[MAX_PATH]; ::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH); UserCommand uc(Shortcut(), cmd, cmdID); uc.init(_hInst, _hSelf); if (uc.doDialog() != -1) { HMENU hRunMenu = ::GetSubMenu((HMENU)::SendMessage(_hParent, NPPM_INTERNAL_GETMENU, 0, 0), MENUINDEX_RUN); int const posBase = 2; if (nbCmd == 0) ::InsertMenu(hRunMenu, posBase - 1, MF_BYPOSITION, (unsigned int)-1, 0); theUserCmds.push_back(uc); ::InsertMenu(hRunMenu, posBase + nbCmd, MF_BYPOSITION, cmdID, uc.toMenuItemString().c_str()); if (nbCmd == 0) { // Insert the separator and modify/delete command ::InsertMenu(hRunMenu, posBase + nbCmd + 1, MF_BYPOSITION, (unsigned int)-1, 0); const char * nativeLangShortcutMapperRun = (NppParameters::getInstance())->getNativeLangMenuStringA(IDM_SETTING_SHORTCUT_MAPPER_RUN); const char * shortcutMapperRunStr = nativeLangShortcutMapperRun?nativeLangShortcutMapperRun:"Modify Shortcut/Delete Command..."; #ifdef UNICODE WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); const wchar_t * shortcutMapperRunStrW = wmc->char2wchar(shortcutMapperRunStr, ::SendMessage(_hParent, NPPM_GETCURRENTNATIVELANGENCODING, 0, 0)); ::InsertMenu(hRunMenu, posBase + nbCmd + 2, MF_BYCOMMAND, IDM_SETTING_SHORTCUT_MAPPER_RUN, shortcutMapperRunStrW); #else ::InsertMenu(hRunMenu, posBase + nbCmd + 2, MF_BYCOMMAND, IDM_SETTING_SHORTCUT_MAPPER_RUN, shortcutMapperRunStr); #endif } (NppParameters::getInstance())->getAccelerator()->updateShortcuts(); } return TRUE; } case IDC_BUTTON_FILE_BROWSER : { FileDialog fd(_hSelf, _hInst); fd.setExtFilter(TEXT("Executable file : "), TEXT(".exe"), TEXT(".com"), TEXT(".cmd"), TEXT(".bat"), NULL); fd.setExtFilter(TEXT("All files : "), TEXT(".*"), NULL); if (const TCHAR *fn = fd.doOpenSingleFileDlg()) addTextToCombo(fn); return TRUE; } default : break; } } } return FALSE; }
void SmartHighlighter::highlightView(ScintillaEditView * pHighlightView) { //Get selection CharacterRange range = pHighlightView->getSelection(); //Clear marks pHighlightView->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_SMART); //If nothing selected, dont mark anything if (range.cpMin == range.cpMax) { return; } int textlen = range.cpMax - range.cpMin + 1; char * text2Find = new char[textlen]; pHighlightView->getSelectedText(text2Find, textlen, false); //do not expand selection (false) //GETWORDCHARS for isQualifiedWord2() and isWordChar2() int listCharSize = pHighlightView->execute(SCI_GETWORDCHARS, 0, 0); char *listChar = new char[listCharSize+1]; pHighlightView->execute(SCI_GETWORDCHARS, 0, (LPARAM)listChar); bool valid = true; //The word has to consist if wordChars only, and the characters before and after something else if (!isQualifiedWord(text2Find, listChar)) valid = false; else { UCHAR c = (UCHAR)pHighlightView->execute(SCI_GETCHARAT, range.cpMax); if (c) { if (isWordChar(char(c), listChar)) valid = false; } c = (UCHAR)pHighlightView->execute(SCI_GETCHARAT, range.cpMin-1); if (c) { if (isWordChar(char(c), listChar)) valid = false; } } if (!valid) { delete [] text2Find; delete [] listChar; return; } // save target locations for other search functions int originalStartPos = (int)pHighlightView->execute(SCI_GETTARGETSTART); int originalEndPos = (int)pHighlightView->execute(SCI_GETTARGETEND); // Get the range of text visible and highlight everything in it int firstLine = (int)pHighlightView->execute(SCI_GETFIRSTVISIBLELINE); int nrLines = min((int)pHighlightView->execute(SCI_LINESONSCREEN), MAXLINEHIGHLIGHT ) + 1; int lastLine = firstLine+nrLines; int startPos = 0; int endPos = 0; int currentLine = firstLine; int prevDocLineChecked = -1; //invalid start const NppGUI & nppGUI = NppParameters::getInstance()->getNppGUI(); FindOption fo; fo._isMatchCase = nppGUI._smartHiliteCaseSensitive; fo._isWholeWord = true; const TCHAR * searchText = NULL; WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); unsigned int cp = pHighlightView->execute(SCI_GETCODEPAGE); const TCHAR * text2FindW = wmc->char2wchar(text2Find, cp); searchText = text2FindW; for(; currentLine < lastLine; ++currentLine) { int docLine = (int)pHighlightView->execute(SCI_DOCLINEFROMVISIBLE, currentLine); if (docLine == prevDocLineChecked) continue; //still on same line (wordwrap) prevDocLineChecked = docLine; startPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, docLine); endPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, docLine+1); if (endPos == -1) { //past EOF endPos = (int)pHighlightView->getCurrentDocLen() - 1; _pFRDlg->processRange(ProcessMarkAll_2, searchText, NULL, startPos, endPos, NULL, &fo); break; } else { _pFRDlg->processRange(ProcessMarkAll_2, searchText, NULL, startPos, endPos, NULL, &fo); } } // restore the original targets to avoid conflicts with the search/replace functions pHighlightView->execute(SCI_SETTARGETSTART, originalStartPos); pHighlightView->execute(SCI_SETTARGETEND, originalEndPos); delete [] listChar; }