Develop and Download Open Source Software

Browse CVS Repository

Diff of /malonnote/mnModel.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1.1.1 by maloninc, Thu Jul 28 03:25:06 2005 UTC revision 1.14 by maloninc, Tue Aug 16 22:16:43 2005 UTC
# Line 4  Line 4 
4  #include <wx/regex.h>  #include <wx/regex.h>
5  #include <iconv.h>  #include <iconv.h>
6    
7  /* プロトタイプ */  static void   toLower(char* string);
8  static char*  decode(const char* string);  static char*  decode(const char* string);
9  static char*  encode(const char* string);  static char*  encode(const char* string);
10  static int compWikiData(const void* wiki1, const void* wiki2);  static int    compWikiData(const void* wiki1, const void* wiki2);
11    
12    
13  /******* WikiList ************************/  /******* WikiList ************************/
# Line 33  mnModel::~mnModel() Line 33  mnModel::~mnModel()
33    
34  WikiList* mnModel::search(const char* searchStr)  WikiList* mnModel::search(const char* searchStr)
35  {  {
36            int         i;
37          wxDir*      dir;          wxDir*      dir;
38          FILE*       fp;          FILE*       fp;
39      wxString    fullPathName;      wxString    fullPathName;
# Line 40  WikiList* mnModel::search(const char* se Line 41  WikiList* mnModel::search(const char* se
41          WikiData*   wikiData;          WikiData*   wikiData;
42      WikiList*   list = new WikiList();      WikiList*   list = new WikiList();
43      wxString*   fileName = new wxString();      wxString*   fileName = new wxString();
         wxRegEx*        regStr;  
44          iconv_t     codeSet;          iconv_t     codeSet;
45          char        outbuf[MAX_BUF_SIZE];          char        outbuf[MAX_BUF_SIZE];
46          const char*       inbufPtr  = searchStr;          const char*       inbufPtr  = searchStr;
# Line 48  WikiList* mnModel::search(const char* se Line 48  WikiList* mnModel::search(const char* se
48          int         inbufSize = strlen(searchStr);          int         inbufSize = strlen(searchStr);
49          int         outbufSize = sizeof(outbuf);          int         outbufSize = sizeof(outbuf);
50          const char* decodeFileName;          const char* decodeFileName;
51            char decodeFileNameBuf[MAX_BUF_SIZE];
52            char*       token;
53            char*       tokenList[32];
54            bool        found;
55    
56            memset(tokenList, 0, sizeof(char*)*32);
57          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
58          codeSet = iconv_open(CODE_SET_EUC_JP, CODE_SET_SYSTEM);          codeSet = iconv_open(CODE_SET_EUC_JP, CODE_SET_SYSTEM);
59          if(codeSet == (iconv_t)-1) {          if(codeSet == (iconv_t)-1) {
60                  MN_FATAL_ERROR(wxT("failed iconv_open"));                  MN_FATAL_ERROR(wxT("failed iconv_open"));
61          }          }
62          iconv(codeSet, (const char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
63          iconv_close(codeSet);          iconv_close(codeSet);
64    
65            /* searchStr to Tokens */
66            token = strtok(outbuf, " ");
67            tokenList[0] = (char*)malloc(strlen(token)+1);
68            snprintf(tokenList[0], strlen(token)+1, "%s", token);
69            i = 1;
70            while((token = strtok(NULL, " ")) != NULL) {
71                    tokenList[i] = (char*)malloc(strlen(token)+1);
72                    snprintf(tokenList[i], strlen(token)+1, "%s", token);
73                    i++;
74            }
75    
76          dir = new wxDir(*wikiDataDir);          dir = new wxDir(*wikiDataDir);
77      if ( !dir->IsOpened() )      if ( !dir->IsOpened() )
78      {      {
79                  MN_FATAL_ERROR(wxT("wxDir has faild\n"));                  MN_FATAL_ERROR(wxT("wxDir has faild\n"));
80          return NULL;          return NULL;
81      }      }
82      bool cont = dir->GetFirst(fileName, wxEmptyString, wxDIR_FILES);      bool cont = dir->GetFirst(fileName, wxT("*.txt"), wxDIR_FILES);
83          while(cont){          while(cont){
84          fullPathName = *wikiDataDir + wxT("/") + *fileName;          fullPathName = *wikiDataDir + wxT("/") + *fileName;
85                  fp = fopen((const char*)fullPathName.mb_str(), "r");                  fp = fopen((const char*)fullPathName.mb_str(), "r");
86                  if(fp == NULL) {                  if(fp == NULL) {
87                          MN_FATAL_ERROR(wxT("fopen faild"));                          MN_FATAL_ERROR(wxT("fopen faild"));
88                  }                  }
89    
90          while(1){          while(1){
91                  memset(buf, 0, MAX_BUF_SIZE);                  memset(buf, 0, MAX_BUF_SIZE);
92              fread(buf, MAX_BUF_SIZE-1, 1, fp);              fread(buf, MAX_BUF_SIZE-1, 1, fp);
93              if(buf[0] == 0) break;              if(buf[0] == 0) break;
94                          decodeFileName = decode(fileName->mb_str());                          decodeFileName = decode(fileName->mb_str());
95                  if(strstr((const char*)buf, (const char*)outbuf) ||                          snprintf(decodeFileNameBuf, MAX_BUF_SIZE, "%s", decodeFileName);
96                                  strstr((const char*)decodeFileName, (const char*)outbuf)) {                          toLower(buf);
97                            toLower(decodeFileNameBuf);
98                            found = TRUE;
99                            for(i = 0; tokenList[i] != NULL; i++){
100                                    toLower(tokenList[i]);
101                                    if(strstr((const char*)buf, (const char*)tokenList[i]) ||
102                                            strstr((const char*)decodeFileName, (const char*)tokenList[i])) {
103                                            found = TRUE;
104                                    }
105                                    else {
106                                            found = FALSE;
107                                            break;
108                                    }
109                            }
110    
111                            if(found){
112                                  wikiData = new WikiData(wikiDataDir, (const char*)fileName->mb_str(), fp);                                  wikiData = new WikiData(wikiDataDir, (const char*)fileName->mb_str(), fp);
113                                  list->Append(wikiData);                                  list->Append(wikiData);
114                                  break;                                  break;
# Line 87  WikiList* mnModel::search(const char* se Line 119  WikiList* mnModel::search(const char* se
119          cont = dir->GetNext(fileName);          cont = dir->GetNext(fileName);
120          }          }
121          delete dir;          delete dir;
122            delete fileName;
123            for(i = 0; tokenList[i] != NULL; i++) free(tokenList[i]);
124    
125          list->Sort(compWikiData);          list->Sort(compWikiData);
126          return list;          return list;
# Line 118  void mnModel::modSearchStr(wxString* old Line 152  void mnModel::modSearchStr(wxString* old
152                  itemStr.sprintf(wxT("%s"), newStr->c_str());                  itemStr.sprintf(wxT("%s"), newStr->c_str());
153          }          }
154  }  }
155    const wxString* mnModel::getWikiDataDir()
156    {
157            return wikiDataDir;
158    }
159    
160  const wxArrayString* mnModel::getSearchStrList()  const wxArrayString* mnModel::getSearchStrList()
161  {  {
# Line 155  WikiData::WikiData(wxString* dataDir, co Line 193  WikiData::WikiData(wxString* dataDir, co
193          decodeStr = decode(file);          decodeStr = decode(file);
194          inbufSize = strlen(decodeStr);          inbufSize = strlen(decodeStr);
195          outbufSize = sizeof(outbuf);          outbufSize = sizeof(outbuf);
196          iconv(codeSet, (const char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
197          subject  = new wxString((const char*)outbuf, conv);          subject  = new wxString((const char*)outbuf, conv);
198          iconv_close(codeSet);          iconv_close(codeSet);
199    
# Line 239  void WikiData::modSubject(wxString* newS Line 277  void WikiData::modSubject(wxString* newS
277          if(codeSet == (iconv_t)-1) {          if(codeSet == (iconv_t)-1) {
278                  MN_FATAL_ERROR(wxT("failed iconv_open"));                  MN_FATAL_ERROR(wxT("failed iconv_open"));
279          }          }
280          iconv(codeSet, (const char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
281          iconv_close(codeSet);          iconv_close(codeSet);
282          subject  = new wxString(newSubject->c_str());          subject  = new wxString(newSubject->c_str());
283          fileName = new wxString(encode(outbuf), conv);          fileName = new wxString(encode(outbuf), conv);
# Line 249  void WikiData::modSubject(wxString* newS Line 287  void WikiData::modSubject(wxString* newS
287          sprintf(newFullPath, "%s/%s", (const char*)dataDirName->mb_str(), (const char*)fileName->mb_str());          sprintf(newFullPath, "%s/%s", (const char*)dataDirName->mb_str(), (const char*)fileName->mb_str());
288    
289          if((fp = fopen(newFullPath, "r")) == NULL) {          if((fp = fopen(newFullPath, "r")) == NULL) {
290                  rename(oldFullPath, newFullPath);                  if(rename(oldFullPath, newFullPath) < 0) wxLogMessage(wxT("rename error: errno=[%d]"), errno);
291          }          }
292          else {          else if(strcmp(oldFullPath, newFullPath)){
293                  wxLogMessage(wxT("File has already exist. [%s]"), fileName->c_str());                  wxLogMessage(wxT("File has already exist. [%s]"), fileName->c_str());
294                  fclose(fp);                  fclose(fp);
295          }          }
296            else {
297                    fclose(fp);
298            }
299    
300          delete oldSubject;          delete oldSubject;
301          delete oldFileName;          delete oldFileName;
# Line 298  const wxString* WikiData::getText() Line 339  const wxString* WikiData::getText()
339          }          }
340    
341          while(fgets(buf, MAX_BUF_SIZE, fp)) {          while(fgets(buf, MAX_BUF_SIZE, fp)) {
342    #ifdef __WXMAC__
343                    for(int i = 0; buf[i] != 0; i++) if(buf[i] == (char)MAC_BACKSLASH) buf[i] = '\\';
344    #endif
345                  inbufPtr = buf;                  inbufPtr = buf;
346                  inbufSize = sizeof(buf);                  inbufSize = sizeof(buf);
347                  outbufPtr = outbuf;                  outbufPtr = outbuf;
348                  outbufSize = sizeof(outbuf);                  outbufSize = sizeof(outbuf);
349                  memset(outbuf, 0, outbufSize);                  memset(outbuf, 0, outbufSize);
350                  iconv(codeSet, (const char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);                  iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
351                  tmpStr = new wxString((char*)outbuf, conv);                  tmpStr = new wxString((char*)outbuf, conv);
352                  *text += *tmpStr;                  *text += *tmpStr;
353                  delete tmpStr;                  delete tmpStr;
# Line 316  const wxString* WikiData::getText() Line 360  const wxString* WikiData::getText()
360    
361  void WikiData::modText(wxString* intext)  void WikiData::modText(wxString* intext)
362  {  {
363            wxCSConv conv(wxT(CODE_SET_SYSTEM));
364          delete text;          delete text;
365          text = new wxString(intext->c_str());          //text = new wxString(intext->c_str());
366            text = new wxString(*intext);
367            //text = new wxString(intext->mb_str(), conv);
368  }  }
369    
370  void WikiData::removeDataFile()  void WikiData::removeDataFile()
# Line 355  void WikiData::save() Line 402  void WikiData::save()
402    
403          memset(inbuf, 0, sizeof(inbuf));          memset(inbuf, 0, sizeof(inbuf));
404          strcpy(inbuf,(const char*)text->mb_str());          strcpy(inbuf,(const char*)text->mb_str());
405    
406    #ifdef __WXMAC__
407            for(int i = 0; inbuf[i] != 0; i++) if(inbuf[i] == (char)MAC_BACKSLASH) inbuf[i] = '\\';
408    #endif
409    
410          inbufPtr = inbuf;          inbufPtr = inbuf;
411          inbufSize = strlen(inbufPtr);          inbufSize = strlen(inbufPtr);
412          outbufPtr = outbuf;          outbufPtr = outbuf;
413          outbufSize = sizeof(outbuf);          outbufSize = sizeof(outbuf);
414          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
415          iconv(codeSet, (const char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
416          fwrite(outbuf, sizeof(outbuf)-outbufSize, 1, fp);          fwrite(outbuf, sizeof(outbuf)-outbufSize, 1, fp);
417          fclose(fp);          fclose(fp);
418          iconv_close(codeSet);          iconv_close(codeSet);
# Line 368  void WikiData::save() Line 420  void WikiData::save()
420    
421  /******* Tools ************************/  /******* Tools ************************/
422    
423    static void toLower(char* string)
424    {
425            int i;
426    
427            for(i = 0; string[i] != 0; i++) {
428                    string[i] = tolower(string[i]);
429            }
430    }
431    
432    
433  static char* decode(const char* string)  static char* decode(const char* string)
434  {  {
435          static char buf[MAX_BUF_SIZE];          static char buf[MAX_BUF_SIZE];

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.14

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26