Exemplo n.º 1
0
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;
	}
Exemplo n.º 2
0
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;
}