Changeset 80 in dev for ProjectEditor


Ignore:
Timestamp:
Mar 26, 2007, 6:33:06 AM (18 years ago)
Author:
dai_9181
Message:

TheText用のリソースを追加。
単語単位での検索を可能にした。

Location:
ProjectEditor
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • ProjectEditor/BREGEXP.H

    r3 r80  
    6464    PFUNC_BRegexpVersion BRegexpVersion;
    6565
    66     char *compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall,int *pLength);
     66    char *compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall, bool isWordUnit, int *pLength);
    6767    char *GetPermuStr(HWND hFindDlg,char *buffer,char *exp,char *szPermu,BOOL IsBigSmall);
    6868};
  • ProjectEditor/Common.h

    r79 r80  
    1414#include <process.h>
    1515#include <wininet.h>
     16
     17#include <vector>
     18#include <string>
     19#include <fstream>
     20
     21using namespace std;
     22
    1623#include "nkf_class.h"
    1724#include "WebSearch.h"
     
    706713
    707714class CSettingFile{
    708     BOOL GetDataLine(char *name,char *parms);
     715    BOOL GetDataLine(const char *name,char *parms);
    709716protected:
    710717    char *buffer;
    711718
    712     BOOL GetWholeValue(char *name,int *pi32data);
     719    BOOL GetWholeValue(const char *name,int *pi32data);
     720    bool GetBoolean( const char *name,bool &b );
    713721    BOOL Get3WholeValue(char *name,int *pd1,int *pd2,int *pd3);
    714722    BOOL GetRGBValue(char *name,COLORREF *prgb);
     
    718726    BOOL GetRebarBand(SAVEREBAR *psr,int num);
    719727
    720     void SetWholeValue(char *name,long i32data);
     728    void SetWholeValue( const char *name,long i32data);
     729    void SetBoolean( const char *name,bool b);
    721730    void Set3WholeValue(char *name,long d1,long d2,long d3);
    722731    void SetRGBValue(char *name,COLORREF rgb);
     
    775784void GetRelationalPath(char *path,char *dir);
    776785void GetFullPath(char *path,char *dir);
    777 void RemoveDirectoryStrong(const char *dir_path);
     786void RemoveDirectoryStrong(const char *dirPath);
    778787BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,_int8 IsOpen);
    779788BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
     
    838847BOOL IsCommandBackDelimitation(char *buffer,int pos);
    839848BOOL IsCommandDelimitation(char *buffer,int p);
    840 char *ComparisonString(char *str1,char *str2,BOOL bBigSmall);
     849char *ComparisonString( char *str1, char *str2, bool isBigSmall, bool isWordUnit );
    841850int GetOneParameter(char *Parameter,int pos,char *retAns);
    842851int GetStringInPare(char *buffer,char *ReadBuffer);
     
    862871BOOL SetRunning(HWND hChild);
    863872BOOL IsNeedCompile(char *FileName,BOOL bDebug);
     873string GetLastErrorString();
    864874
    865875//DocumentAdvice.cpp
  • ProjectEditor/FileOperation.cpp

    r24 r80  
    172172}
    173173
    174 void RemoveDirectoryStrong(const char *dir_path){
     174void RemoveDirectoryStrong(const char *dirPath){
     175    char tempDirPath[MAX_PATH];
     176    lstrcpy( tempDirPath, dirPath );
     177
     178    if( tempDirPath[lstrlen(tempDirPath)-1] == '\\' ){
     179         tempDirPath[lstrlen(tempDirPath)-1] = 0;
     180    }
     181
    175182    HANDLE hFind;
    176183    WIN32_FIND_DATA wfd;
    177184    char temporary[MAX_PATH];
    178     sprintf(temporary,"%s*",dir_path);
     185    sprintf(temporary,"%s\\*",tempDirPath);
    179186
    180187    hFind=FindFirstFile(temporary,&wfd);
     
    184191                if(!(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0)){
    185192                    //ディレクトリのとき
    186                     sprintf(temporary,"%s%s\\",dir_path,wfd.cFileName);
     193                    sprintf(temporary,"%s\\%s\\",tempDirPath,wfd.cFileName);
    187194                    RemoveDirectoryStrong(temporary);
    188195                }
     
    190197            else{
    191198                //ファイルのとき
    192                 sprintf(temporary,"%s%s",dir_path,wfd.cFileName);
     199                sprintf(temporary,"%s\\%s",tempDirPath,wfd.cFileName);
    193200
    194201                DeleteFile(temporary);
    195202            }
    196203        }while(FindNextFile(hFind,&wfd));
    197     }
    198 
    199     RemoveDirectory(dir_path);
     204
     205        FindClose( hFind );
     206    }
     207
     208    if( !RemoveDirectory(tempDirPath) ){
     209        OutputDebugString( GetLastErrorString().c_str() );
     210        OutputDebugString( "\r\n" );
     211        OutputDebugString( "一時ディレクトリの削除に失敗\r\n" );
     212    }
    200213}
    201214
  • ProjectEditor/NonVolatile.cpp

    r24 r80  
    127127}
    128128
    129 BOOL CSettingFile::GetDataLine(char *name,char *parms){
     129BOOL CSettingFile::GetDataLine( const char *name,char *parms){
    130130    int i,i2,length;
    131131    length=lstrlen(name);
     
    150150}
    151151
    152 BOOL CSettingFile::GetWholeValue(char *name,int *pi32data){
     152BOOL CSettingFile::GetWholeValue( const char *name, int *pi32data ){
    153153    char temporary[8192];
    154154    if(!GetDataLine(name,temporary)) return 0;
    155155    *pi32data=atoi(temporary);
     156    return 1;
     157}
     158bool CSettingFile::GetBoolean( const char *name,bool &b ){
     159    int i=0;
     160    if( !GetWholeValue( name, &i ) ){
     161        return 0;
     162    }
     163
     164    b = ( i != 0 ) ? true:false;
     165
    156166    return 1;
    157167}
     
    402412    if(!GetWholeValue("IsFindStrBigSmall",&bFindStrBigSmall)) bFindStrBigSmall=0;
    403413
     414    // 単語単位で検索するか
     415    if( !GetBoolean("isWordUnit",isWordUnit) ){
     416        isWordUnit = false;
     417    }
     418
    404419    //検索時に、正規表現を利用するかどうか
    405420    if(!GetWholeValue("IsRegExp",&bRegExp)) bRegExp=0;
     
    612627}
    613628
    614 void CSettingFile::SetWholeValue(char *name,long i32data){
     629void CSettingFile::SetWholeValue(const char *name,long i32data){
    615630    sprintf(buffer+lstrlen(buffer),"%s=%d\r\n",name,i32data);
     631}
     632void CSettingFile::SetBoolean(const char *name,bool b){
     633    sprintf(buffer+lstrlen(buffer),"%s=%d\r\n",name,b?1:0);
    616634}
    617635void CSettingFile::Set3WholeValue(char *name,long d1,long d2,long d3){
     
    779797    SetWholeValue("IsFindStrBigSmall",bFindStrBigSmall);
    780798
     799    // 単語単位で検索するか
     800    SetBoolean("isWordUnit",isWordUnit);
     801
    781802    //検索時に、正規表現を利用するか
    782803    SetWholeValue("IsRegExp",bRegExp);
  • ProjectEditor/NonVolatile.h

    r3 r80  
    1717    //大文字・小文字検索を見分けるかどうか
    1818    BOOL bFindStrBigSmall;
     19
     20    // 単語単位で検索するか
     21    bool isWordUnit;
    1922
    2023    //正規表現検索を行うかどうか
  • ProjectEditor/Search.cpp

    r24 r80  
    44int FindPosCounter;
    55
    6 char *CompareSuper(HWND hDlg,char *buffer,char *szFind,BOOL IsBigSmall,BOOL IsRegExp,int *pLength){
     6char *CompareSuper(HWND hDlg,char *buffer,char *szFind,BOOL IsBigSmall,bool isWordUnit,BOOL IsRegExp,int *pLength ){
    77    char *pTemp;
    88
     
    1111    if(IsRegExp){
    1212        //正規表現を有効にしながら検索
    13         pTemp=obj_RegExp.compare(hDlg,buffer,szFind,IsBigSmall,pLength);
     13        pTemp=obj_RegExp.compare(hDlg,buffer,szFind,IsBigSmall, isWordUnit, pLength);
    1414    }
    1515    else{
    1616        //通常の検索
    17         pTemp=ComparisonString(buffer,szFind,IsBigSmall);
     17        pTemp=ComparisonString(buffer,szFind,IsBigSmall?true:false, isWordUnit );
    1818
    1919        *pLength=lstrlen(szFind);
     
    2323}
    2424
    25 void SetSearchData(HWND hDlg,char *str,_int8 IsBigSmall){
     25void SetSearchData(HWND hDlg,char *str,_int8 IsBigSmall, bool isWordUnit){
    2626    extern HANDLE hHeap;
    2727    extern MDIINFO MdiInfo[MAX_WNDNUM];
     
    4646    i3=1;
    4747    while(1){
    48         FindStr=CompareSuper(hDlg,buffer+i,str,IsBigSmall,pobj_nv->bRegExp,&length);
     48        FindStr=CompareSuper(hDlg,buffer+i,str,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    4949        if(FindStr==(char *)-1){
    5050            //エラー
     
    136136    return 0;
    137137}
    138 BOOL StartSearch(HWND hDlg,char *FindString,_int8 IsBigSmall,BOOL IsShowMessage){
     138BOOL StartSearch(HWND hDlg,char *FindString,_int8 IsBigSmall, bool isWordUnit, BOOL IsShowMessage){
    139139    extern MDIINFO MdiInfo[MAX_WNDNUM];
    140140    int i;
     
    155155    int length;
    156156
    157     i=(int)CompareSuper(hDlg,pBuf+i,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
     157    i=(int)CompareSuper(hDlg,pBuf+i,FindString,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    158158    if(i==-1){
    159159        //エラー
     
    173173        if(!IsShowMessage) return 0;
    174174
    175         i=(int)CompareSuper(hDlg,pBuf,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
     175        i=(int)CompareSuper(hDlg,pBuf,FindString,IsBigSmall, isWordUnit, pobj_nv->bRegExp,&length);
    176176        if(i==-1){
    177177            //エラー
     
    223223            //大文字・小文字
    224224            if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
     225
     226            // 単語単位
     227            if( pobj_nv->isWordUnit ){
     228                SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_SETCHECK, BST_CHECKED, 0 );
     229            }
    225230
    226231            //正規表現
     
    263268                    else pobj_nv->bFindStrBigSmall=0;
    264269
     270                    // 単語単位
     271                    pobj_nv->isWordUnit =
     272                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     273
    265274                    //正規表現
    266275                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
    267276                    else pobj_nv->bRegExp=0;
    268277
    269                     StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
     278                    StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 1);
    270279                    return 1;
    271280                case IDC_FINDALL:
     
    278287                    else pobj_nv->bFindStrBigSmall=0;
    279288
     289                    // 単語単位
     290                    pobj_nv->isWordUnit =
     291                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     292
    280293                    //正規表現
    281294                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    287300                    FindPosCounter=sizeof(long);
    288301                    pFindPos=(long *)HeapAlloc(hHeap,0,FindPosCounter);
    289                     SetSearchData(FindAllDlg,temporary,pobj_nv->bFindStrBigSmall);
     302                    SetSearchData(FindAllDlg,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit );
    290303                case IDCANCEL:
    291304                    EndDialog(hwnd,0);
     
    311324            if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
    312325
     326            // 単語単位
     327            if( pobj_nv->isWordUnit ){
     328                SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_SETCHECK, BST_CHECKED, 0 );
     329            }
     330
    313331            //正規表現
    314332            if(pobj_nv->bRegExp) SendDlgItemMessage(hwnd,IDC_REGEXP,BM_SETCHECK,BST_CHECKED,0);
     
    356374                    else pobj_nv->bFindStrBigSmall=0;
    357375
     376                    // 単語単位
     377                    pobj_nv->isWordUnit =
     378                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     379
    358380                    //正規表現
    359381                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    364386                    AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
    365387
    366                     StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
     388                    StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 1);
    367389                    return 1;
    368390                case IDC_PERMUTATIONNEXT:
     
    374396                    if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
    375397                    else pobj_nv->bFindStrBigSmall=0;
     398
     399                    // 単語単位
     400                    pobj_nv->isWordUnit =
     401                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
    376402
    377403                    //正規表現
     
    399425
    400426                    int length;
    401                     i=(int)CompareSuper(hwnd,pTemp,temporary,pobj_nv->bFindStrBigSmall,pobj_nv->bRegExp,&length);
     427                    i=(int)CompareSuper(hwnd,pTemp,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, pobj_nv->bRegExp,&length);
    402428                    if(i==-1){
    403429                        HeapDefaultFree(pTemp);
     
    441467                    else pobj_nv->bFindStrBigSmall=0;
    442468
     469                    // 単語単位
     470                    pobj_nv->isWordUnit =
     471                        ( SendDlgItemMessage( hwnd, IDC_ISWORDUNIT, BM_GETCHECK, 0, 0 ) != 0 );
     472
    443473                    //正規表現
    444474                    if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
     
    462492                    TextEdit_SetSel(WndNum,0,0,TRUE);
    463493
    464                     while(StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,0)){
     494                    while(StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall, pobj_nv->isWordUnit, 0)){
    465495                        if(pobj_nv->bRegExp){
    466496                            //選択されている文字列を取得
  • ProjectEditor/SubOperation.cpp

    r69 r80  
    183183}
    184184
    185 char *ComparisonString(char *str1,char *str2,BOOL bBigSmall){
    186     int i,i2,i3,len1,len2;
    187     len1=lstrlen(str1);
    188     len2=lstrlen(str2);
    189     for(i=0;i<len1-len2+1;i++){
    190         for(i2=0,i3=i;i2<len2;i2++,i3++){
    191             if(bBigSmall){
    192                 if(str1[i3]!=str2[i2]) break;
     185char *ComparisonString( char *str1, char *str2, bool isBigSmall, bool isWordUnit ){
     186    char *temp1 = (char *)malloc( lstrlen( str1 ) +1 );
     187    char *temp2 = (char *)malloc( lstrlen( str2 ) +1 );
     188
     189    lstrcpy( temp1, str1 );
     190    lstrcpy( temp2, str2 );
     191
     192    if( isBigSmall == false ){
     193        // 大文字小文字を区別しない場合
     194        // すべて大文字にしておく
     195        CharUpper( temp1 );
     196        CharUpper( temp2 );
     197    }
     198
     199    int len2 = lstrlen( temp2 );
     200
     201    const char *temp3 = strstr( temp1, temp2 );
     202    while( temp3 ){
     203        if( isWordUnit ){
     204            int pos = (int)temp3 - (int)temp1;
     205            if( pos == 0 ){
     206                if( !IsVariableChar( temp1[len2] ) ){
     207                        break;
     208                }
    193209            }
    194210            else{
    195                 if((char)CharUpper((LPTSTR)MAKELONG(str1[i3],0))!=(char)CharUpper((LPTSTR)MAKELONG(str2[i2],0))) break;
    196             }
    197         }
    198         if(IsDBCSLeadByte(str1[i])) i++;
    199         if(i2==len2) return str1+i3-i2;
    200     }
    201     return 0;
     211                if( !IsVariableChar( temp1[pos-1] )
     212                    && !IsVariableChar( temp1[pos+len2] ) ){
     213                        break;
     214                }
     215            }
     216        }
     217        else{
     218            break;
     219        }
     220
     221        temp3 = strstr( temp3 + 1, temp2 );
     222    }
     223
     224    char *result = NULL;
     225    if( temp3 ){
     226        int pos = (int)temp3 - (int)temp1;
     227        result = str1 + pos;
     228    }
     229
     230    free( temp1 );
     231    free( temp2 );
     232
     233    return result;
    202234}
    203235int GetOneParameter(char *Parameter,int pos,char *retAns){
     
    14691501    return 1;
    14701502}
     1503
     1504string GetLastErrorString(){
     1505    char *lpMsgBuf;
     1506
     1507    FormatMessage(
     1508        FORMAT_MESSAGE_ALLOCATE_BUFFER |
     1509        FORMAT_MESSAGE_FROM_SYSTEM |
     1510        FORMAT_MESSAGE_IGNORE_INSERTS,
     1511        NULL,
     1512        GetLastError(),
     1513        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
     1514        (LPTSTR) &lpMsgBuf,
     1515        0,
     1516        NULL
     1517    );
     1518
     1519    string result = lpMsgBuf;
     1520
     1521    LocalFree( lpMsgBuf );
     1522
     1523    return result;
     1524}
  • ProjectEditor/reg_exp.cpp

    r3 r80  
    2020}
    2121
    22 char *CRegExp::compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall,int *pLength){
     22char *CRegExp::compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall, bool isWordUnit ,int *pLength){
    2323    BREGEXP *rxp=0;
    2424    char msg[255];
     
    5858    if((*pLength)==0) return 0;
    5959
    60     pTemp=ComparisonString(buffer,(char *)rxp->outp,0);
     60    pTemp=ComparisonString(buffer,(char *)rxp->outp,false, isWordUnit);
    6161
    6262    if(rxp) BRegfree(rxp);
Note: See TracChangeset for help on using the changeset viewer.