#ifndef __TEXT_FILTER__ #define __TEXT_FILTER__ //------------------------------------------------------------------------------ /** @brief // ÅØ½ºÆ® ÇÊÅ͸µÀ» À§ÇÑ Å¬·¡½º. // ÇÊÅ͸µ ´ë»óÀÌ ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â ÇÔ¼ö (IsHaveReplace)¿Í // ½ÇÁ¦·Î ÇÊÅ͸µÀ» ÇÏ´Â ÇÔ¼ö (Replace) µÎ°³·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. // »õ ÇÊÅ͸¦ ¸¸µé ¶§´Â ITextFilter¸¦ »ó¼ÓÇÑ µÚ // virtual char* GetReplaceTarget(int *nLength, char *szSrc); // virtual void ReplaceWord(char *szDest, const char *szSrc, int nMaxLength); // µÎ°³ ÇÔ¼ö¸¦ overrideÇÔÀ¸·Î½á Á¦ÀÛÇÏ°Ô µÈ´Ù. @author - Áö¿Ï @since - 2005.8.12 @remarks */ #define SLANG_LENGTH_MAX 32 enum FILTER_NATION_TYPE { FILTER_DEFAULT = 0, FILTER_KOREA, FILTER_CHINA, FILTER_TAIWAN, FILTER_JAPAN, FILTER_RUSSIA, }; enum FILTER_REPLACE_TYPE { KReplace_By_Character = 0, KReplace_By_Word, }; enum FILTER_CHECK_TYPE { kCheckSubString = 0, kCheckFullString = 1, }; class IAbstractInterface { public: bool IsInit() {return m_xInit; } protected: bool m_xInit; }; class ITextFilter : public IAbstractInterface { protected: struct SlangTextInfo { STLX_STRING slang_text_; bool pre_wild_card_; bool post_wild_card_; SlangTextInfo() :pre_wild_card_(true),post_wild_card_(true) { slang_text_.clear(); } SlangTextInfo(STLX_STRING& slang_text, bool pre_wild_card, bool post_wild_card) :slang_text_(slang_text), pre_wild_card_(pre_wild_card), post_wild_card_(post_wild_card) {} }; public : ITextFilter(); virtual ~ITextFilter(); virtual HRESULT Create() = 0; virtual HRESULT Destroy() = 0; virtual HRESULT Save(const char *szFName) = 0; virtual HRESULT Load(const char *szFName,bool bNameFilter=true) = 0; virtual HRESULT LoadFromPack(const char *szFName,bool bNameFilter=true) = 0; bool CheckIncludeString(const char *szSrc);// bool CheckIncludeStringChina(const char * Text); bool CheckIncludeStringTaiwan(const char * Text); bool CheckIncludeStringJapan(const char * Text); bool CheckIncludeStringRussia(const char * Text); bool IsHaveReplace(char *szSrc,char *szDest=NULL,int nDestSize=0); void SetNationType( FILTER_NATION_TYPE Type = FILTER_DEFAULT ); void SetReplaceString(const char* replace_string, FILTER_REPLACE_TYPE replace_type); void SetCheckType(FILTER_CHECK_TYPE filter_check_type) { check_type_ = filter_check_type; } protected : void Clear() {} void Initialize() {m_xInit = false; } void Release() {} char * FindString(char *szStr, const char *szCharSet); char * FindStringUseWildCard(char *szStr, const char *szCharSet, size_t iCharSetIndex); void GetStringPart(char *szDest, const char *szSrc, int nLength); void Trim(char *szDest, const char *szSrc); virtual char* GetReplaceTarget(int *nLength, char *szSrc) = 0; protected : bool m_bNameFilter; FILTER_CHECK_TYPE check_type_; STLX_VECTOR slang_text_info_list_; private : DWORD m_lcid; FILTER_NATION_TYPE m_NationType; int length_replace_string_; char* replace_string_; FILTER_REPLACE_TYPE replace_type_; }; class CNSlangTextFilter : public ITextFilter { public : CNSlangTextFilter() {Clear(); Create();} virtual ~CNSlangTextFilter() {Destroy(); } virtual HRESULT Create() {m_xInit = true; return true; } virtual HRESULT Destroy(); virtual HRESULT Save(const char *szFName) {szFName;return false; } virtual HRESULT Load(const char *szFName,bool bNameFilter=true); virtual HRESULT LoadFromPack(const char *szFName,bool bNameFilter=true); protected : void Clear(); virtual char* GetReplaceTarget(int *nLength, char *szSrc); public: }; #endif