#include "stdafx.h" #include "FilterManager.h" #include "./util/Tokenizer.h" /// bool cFilterManager::LoadFilter( const cString& pathName ) { /// ÆÄÀÏ¿­±â cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load filter script" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); cString str; /// Àüü ¸ÅÄ¡ ÇÊÅÍ´Ü¾î ·Îµå while( tokenizer.IsEnd() == false ) { tokenizer.GetNext( &str ); if( str.Compare( "WholeMatch" ) == 0 ) continue; /// ÀÌ ´Ü¾î°¡³ª¿À¸é ºÎºÐ ÇÊÅÍ ·Îµå·Î ¹Ù²îµµ·Ï ÇÑ´Ù if( str.Compare( "PartMatch" ) == 0 ) break; str.ToLower(); /// µ¥ÀÌÅÍ »ðÀÔ TCHAR buffer[256] = {0,}; int len = ConvertToUnicode( str.Cstr(), buffer, 256 ); assert( len > 0 ); if( mWholeSet.Insert( buffer ) == false ) { assert( 0 && "failed to insert filter set" ); cString msg; msg.Format("[%s] %s", pathName.Cstr(), str.Cstr() ); MessageBoxA( NULL, msg.Cstr(), "failed to insert filter set", MB_OK | MB_ICONERROR ); return false; } } /// ºÎºÐ ¸ÅÄ¡ ÇÊÅÍ ´Ü¾î ·Îµå while( tokenizer.IsEnd() == false ) { tokenizer.GetNext( &str ); str.ToLower(); /// µ¥ÀÌÅÍ »ðÀÔ TCHAR buffer[256] = {0,}; int len = ConvertToUnicode( str.Cstr(), buffer, 256 ); assert( len > 0 ); /// ۰ª »©³»±â TCHAR key[2] = {0,}; ::_tcsncpy_s( key, buffer, 1 ); /// cPartMap::cIterator i = mPartMap.Find( key ); if( i == mPartMap.End() ) { /// ±âÁ¸ ۰¡ ¾øÀ¸¸é »ý¼º /// °°Àº ±ÛÀÚ·Î ½ÃÀ۵Ǵ ´Ü¾îµé ¹­À½ ¹è¿­ cSiblingArr* pSiblingArr = new cSiblingArr; pSiblingArr->PushBack( buffer ); if( mPartMap.Insert( key, pSiblingArr ) == false ) { assert( 0 && "failed to insert partMatch word" ); cString msg; msg.Format("[%s] %s", pathName.Cstr(), str.Cstr() ); MessageBoxA( NULL, msg.Cstr(), "failed to insert partMatch word", MB_OK | MB_ICONERROR ); return false; } } else { /// ±âÁ¸ ۰¡ Á¸ÀçÇÏ¸é ¹è¿­¿¡ »ðÀÔÇϱâ cSiblingArr* pSiblingArr = (cSiblingArr*)(i->mSecond); pSiblingArr->PushBack( buffer ); } } return true; } bool cFilterManager::FindWholeMatch( const cStringT& str ) { cWholeSet::cIterator i = mWholeSet.Find( str ); if( i == mWholeSet.End() ) return false; else return true; }