bool AutoCompletion::setLanguage(LangType language) { if (_curLang == language) return true; _curLang = language; TCHAR path[MAX_PATH]; //::GetModuleFileName(NULL, path, MAX_PATH); //PathRemoveFileSpec(path); CString strOwmPath = theApp.GetModulePath(); lstrcpy(path, strOwmPath); lstrcat(path, TEXT("\\APIs\\")); lstrcat(path, getApiFileName()); lstrcat(path, TEXT(".xml")); _XmlFile = TiXmlDocument(path); _funcCompletionActive = _XmlFile.LoadFile(); TiXmlNode * pAutoNode = NULL; if (_funcCompletionActive) { _funcCompletionActive = false; //safety TiXmlNode * pNode = _XmlFile.FirstChild(TEXT("OwmScite")); if (!pNode) return false; pAutoNode = pNode = pNode->FirstChildElement(TEXT("AutoComplete")); if (!pNode) return false; pNode = pNode->FirstChildElement(TEXT("KeyWord")); if (!pNode) return false; _pXmlKeyword = reinterpret_cast<TiXmlElement *>(pNode); if (!_pXmlKeyword) return false; _funcCompletionActive = true; } if(_funcCompletionActive) { //try setting up environment //setup defaults _ignoreCase = true; _funcCalltip._start = '('; _funcCalltip._stop = ')'; _funcCalltip._param = ','; _funcCalltip._terminal = ';'; _funcCalltip._ignoreCase = true; TiXmlElement * pElem = pAutoNode->FirstChildElement(TEXT("Environment")); if (pElem) { const TCHAR * val = 0; val = pElem->Attribute(TEXT("ignoreCase")); if (val && !lstrcmp(val, TEXT("no"))) { _ignoreCase = false; _funcCalltip._ignoreCase = false; } val = pElem->Attribute(TEXT("startFunc")); if (val && val[0]) _funcCalltip._start = val[0]; val = pElem->Attribute(TEXT("stopFunc")); if (val && val[0]) _funcCalltip._stop = val[0]; val = pElem->Attribute(TEXT("paramSeparator")); if (val && val[0]) _funcCalltip._param = val[0]; val = pElem->Attribute(TEXT("terminal")); if (val && val[0]) _funcCalltip._terminal = val[0]; } } if (_funcCompletionActive) { _funcCalltip.setLanguageXML(_pXmlKeyword); } else { _funcCalltip.setLanguageXML(NULL); } _keyWords = TEXT(""); if (_funcCompletionActive) { //Cache the keywords //Iterate through all keywords TiXmlElement *funcNode = _pXmlKeyword; const TCHAR * name = NULL; for (; funcNode; funcNode = funcNode->NextSiblingElement(TEXT("KeyWord")) ) { name = funcNode->Attribute(TEXT("name")); if (!name) //malformed node continue; _keyWords.append(name); _keyWords.append(TEXT("\n")); } } return _funcCompletionActive; }
bool AutoCompletion::setLanguage(LangType language) { if (_curLang == language) return true; _curLang = language; TCHAR path[MAX_PATH]; ::GetModuleFileName(NULL, path, MAX_PATH); PathRemoveFileSpec(path); lstrcat(path, TEXT("\\plugins\\APIs\\")); lstrcat(path, getApiFileName()); lstrcat(path, TEXT(".xml")); if (_pXmlFile) delete _pXmlFile; _pXmlFile = new TiXmlDocument(path); _funcCompletionActive = _pXmlFile->LoadFile(); TiXmlNode * pAutoNode = NULL; if (_funcCompletionActive) { _funcCompletionActive = false; //safety TiXmlNode * pNode = _pXmlFile->FirstChild(TEXT("NotepadPlus")); if (!pNode) return false; pAutoNode = pNode = pNode->FirstChildElement(TEXT("AutoComplete")); if (!pNode) return false; pNode = pNode->FirstChildElement(TEXT("KeyWord")); if (!pNode) return false; _pXmlKeyword = reinterpret_cast<TiXmlElement *>(pNode); if (!_pXmlKeyword) return false; _funcCompletionActive = true; } if(_funcCompletionActive) //try setting up environment { //setup defaults _ignoreCase = true; _funcCalltip._start = '('; _funcCalltip._stop = ')'; _funcCalltip._param = ','; _funcCalltip._terminal = ';'; _funcCalltip._ignoreCase = true; _funcCalltip._additionalWordChar = TEXT(""); TiXmlElement * pElem = pAutoNode->FirstChildElement(TEXT("Environment")); if (pElem) { const TCHAR * val = 0; val = pElem->Attribute(TEXT("ignoreCase")); if (val && !lstrcmp(val, TEXT("no"))) { _ignoreCase = false; _funcCalltip._ignoreCase = false; } val = pElem->Attribute(TEXT("startFunc")); if (val && val[0]) _funcCalltip._start = val[0]; val = pElem->Attribute(TEXT("stopFunc")); if (val && val[0]) _funcCalltip._stop = val[0]; val = pElem->Attribute(TEXT("paramSeparator")); if (val && val[0]) _funcCalltip._param = val[0]; val = pElem->Attribute(TEXT("terminal")); if (val && val[0]) _funcCalltip._terminal = val[0]; val = pElem->Attribute(TEXT("additionalWordChar")); if (val && val[0]) _funcCalltip._additionalWordChar = val; } } if (_funcCompletionActive) { _funcCalltip.setLanguageXML(_pXmlKeyword); } else { _funcCalltip.setLanguageXML(NULL); } _keyWords = TEXT(""); _keyWordArray.clear(); if (_funcCompletionActive) { //Cache the keywords //Iterate through all keywords TiXmlElement *funcNode = _pXmlKeyword; const TCHAR * name = NULL; for (; funcNode; funcNode = funcNode->NextSiblingElement(TEXT("KeyWord")) ) { name = funcNode->Attribute(TEXT("name")); if (name) { size_t len = lstrlen(name); if (len) { _keyWordArray.push_back(name); if (len > _keyWordMaxLen) _keyWordMaxLen = len; } } } sort(_keyWordArray.begin(), _keyWordArray.end()); for (size_t i = 0, len = _keyWordArray.size(); i < len; ++i) { _keyWords.append(_keyWordArray[i]); _keyWords.append(TEXT(" ")); } } return _funcCompletionActive; }