#include "stdafx.h" #include "common.h" using namespace ActiveBasic::IDE; CRegExp obj_RegExp; CRegExp::CRegExp() { const std::string bregexpDllPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\BREGEXP.dll"; hLib = LoadLibrary( bregexpDllPath.c_str() ); if( !hLib ) { MessageBox( NULL, "BREGEXP.dll �����‚���܂��B", "G񁃃��[", MB_OK | MB_ICONEXCLAMATION ); } BMatch=(PFUNC_BMatch)GetProcAddress(hLib,"BMatch"); BSubst=(PFUNC_BSubst)GetProcAddress(hLib,"BSubst"); BTrans=(PFUNC_BTrans)GetProcAddress(hLib,"BTrans"); BSplit=(PFUNC_BSplit)GetProcAddress(hLib,"BSplit"); BRegfree=(PFUNC_BRegfree)GetProcAddress(hLib,"BRegfree"); BRegexpVersion=(PFUNC_BRegexpVersion)GetProcAddress(hLib,"BRegexpVersion"); } CRegExp::~CRegExp(){ FreeLibrary(hLib); } char *CRegExp::compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall, bool isWordUnit ,int *pLength){ BREGEXP *rxp=0; char msg[255]; char *pTemp; pTemp=(char *)HeapAlloc(hHeap,0,lstrlen(exp)+255); if(strstr(exp,"/")){ if(strstr(exp,"#")){ sprintf(pTemp,"m@(%s)@",exp); } else sprintf(pTemp,"m#(%s)#",exp); } else sprintf(pTemp,"m/(%s)/",exp); //Shift-JIS? lstrcat(pTemp,"k"); //?E if(!IsBigSmall) lstrcat(pTemp,"i"); int result; result=BMatch(pTemp,buffer,buffer+lstrlen(buffer),&rxp,msg); HeapDefaultFree(pTemp); if(!result){ if(rxp) BRegfree(rxp); return 0; } else if(result==-1){ if(rxp) BRegfree(rxp); MessageBox(hFindDlg,msg,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION); return (char *)-1; } *pLength=(rxp->outendp) - (rxp->outp); if((*pLength)==0) return 0; pTemp=ComparisonString(buffer,(char *)rxp->outp,false, isWordUnit); if(rxp) BRegfree(rxp); return pTemp; } char *CRegExp::GetPermuStr(HWND hFindDlg,char *buffer,char *exp,char *szPermu,BOOL IsBigSmall){ BREGEXP *rxp=0; char msg[255]; char *pTemp; pTemp=(char *)HeapAlloc(hHeap,0,lstrlen(exp)+255); if(strstr(exp,"/")||strstr(szPermu,"/")){ if(strstr(exp,"#")||strstr(szPermu,"#")){ sprintf(pTemp,"s@%s@%s@",exp,szPermu); } else sprintf(pTemp,"s#%s#%s#",exp,szPermu); } else sprintf(pTemp,"s/%s/%s/",exp,szPermu); //Shift-JIS? lstrcat(pTemp,"k"); //?E if(!IsBigSmall) lstrcat(pTemp,"i"); int result; result=BSubst(pTemp,buffer,buffer+lstrlen(buffer),&rxp,msg); HeapDefaultFree(pTemp); if(!result){ if(rxp) BRegfree(rxp); return 0; } else if(result==-1){ if(rxp) BRegfree(rxp); MessageBox(hFindDlg,msg,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION); return (char *)-1; } int length; length=(rxp->outendp) - (rxp->outp); pTemp=(char *)HeapAlloc(hHeap,0,length+1); memcpy(pTemp,rxp->outp,length); pTemp[length]=0; if(rxp) BRegfree(rxp); return pTemp; }