int ODBCStringsMatrix::SearchStrings(LPCTSTR szStringSearch) { // Cut search string to small pieces. ##################### CStringArray arrSmallStrings; CutToSmallStrings((char*)szStringSearch, arrSmallStrings); int nSmallStrings = (int)arrSmallStrings .GetCount(); // ######################################################## CString sStrSearch = arrSmallStrings.GetCount() > 0 ? arrSmallStrings[0] : szStringSearch; // Reload all strings. #################################### if( !sStrSearch.GetLength() || arrSmallStrings.GetCount() == 0 ) { m_arrSearchResult.Copy(&m_arrFullStrings); return m_arrSearchResult.GetCount(); } // ######################################################## // Array of datas to solve duplicated items problem. ########## AutoSortedArray arrItemDatas, arrItemDatas1; // ############################################################ int nCount = FindStrings(sStrSearch.GetBuffer(), &arrItemDatas, &arrItemDatas); if( nCount <= 0 ) { m_arrSearchResult.DeleteAll(); return 0L; } int nLoop = 1; AutoSortedArray *pArr = &arrItemDatas1, *pArr1 = &arrItemDatas; while( nLoop < nSmallStrings ) { // Set up search string. ####################################### sStrSearch = arrSmallStrings[nLoop]; // Change pointers. ############################################ AutoSortedArray* pTmp = pArr; pArr = pArr1; pArr1 = pTmp; // Free array datas. ########################################### pArr1->DeleteAll(); // ############################################################# if( nLoop == nSmallStrings - 1 ) FindStrings(sStrSearch.GetBuffer(), pArr, pArr1); else FindStringsExact(sStrSearch.GetBuffer(), pArr, pArr1); // Nothing were found!!! ###################################### if( pArr1->GetCount() == 0 ) break; // ############################################################ nLoop ++; } // Fill search result array list. ################################## nCount = pArr1->GetCount(); nLoop = 0; if( nCount > 0 ) m_arrSearchResult.Copy(pArr1); // ################################################################ return nCount; }
ExtractedStrings XmlResApp::FindStrings(const wxString& filename, wxXmlNode *node) { ExtractedStrings arr; wxXmlNode *n = node; if (n == NULL) return arr; n = n->GetChildren(); while (n) { if ((node->GetType() == wxXML_ELEMENT_NODE) && // parent is an element, i.e. has subnodes... (n->GetType() == wxXML_TEXT_NODE || n->GetType() == wxXML_CDATA_SECTION_NODE) && // ...it is textnode... ( node/*not n!*/->GetName() == wxT("label") || (node/*not n!*/->GetName() == wxT("value") && !n->GetContent().IsNumber()) || node/*not n!*/->GetName() == wxT("help") || node/*not n!*/->GetName() == wxT("longhelp") || node/*not n!*/->GetName() == wxT("tooltip") || node/*not n!*/->GetName() == wxT("htmlcode") || node/*not n!*/->GetName() == wxT("title") || node/*not n!*/->GetName() == wxT("item") || node/*not n!*/->GetName() == wxT("message") || node/*not n!*/->GetName() == wxT("note") || node/*not n!*/->GetName() == wxT("defaultdirectory") || node/*not n!*/->GetName() == wxT("defaultfilename") || node/*not n!*/->GetName() == wxT("defaultfolder") || node/*not n!*/->GetName() == wxT("filter") || node/*not n!*/->GetName() == wxT("caption") )) // ...and known to contain translatable string { if (!flagGettext || node->GetAttribute(wxT("translate"), wxT("1")) != wxT("0")) { arr.push_back ( ExtractedString ( ConvertText(n->GetContent()), filename, n->GetLineNumber() ) ); } } // subnodes: if (n->GetType() == wxXML_ELEMENT_NODE) { ExtractedStrings a2 = FindStrings(filename, n); WX_APPEND_ARRAY(arr, a2); } n = n->GetNext(); } return arr; }