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.23 by maloninc, Thu Sep 15 09:20:48 2005 UTC revision 1.30 by maloninc, Fri Dec 30 05:51:43 2005 UTC
# Line 65  bool mnModel::makeSearchToken(const char Line 65  bool mnModel::makeSearchToken(const char
65                  tokenList[i] = (char*)malloc(strlen(token)+1);                  tokenList[i] = (char*)malloc(strlen(token)+1);
66                  snprintf(tokenList[i], strlen(token)+1, "%s", token);                  snprintf(tokenList[i], strlen(token)+1, "%s", token);
67                  i++;                  i++;
68                    if(i >= MAX_TOKEN) break;
69          }          }
70          return true;          return true;
71  }  }
# Line 81  bool mnModel::matchWithToken(wxString* f Line 82  bool mnModel::matchWithToken(wxString* f
82      fullPathName = *wikiDataDir + wxT("/") + *fileName;      fullPathName = *wikiDataDir + wxT("/") + *fileName;
83          fp = fopen((const char*)fullPathName.mb_str(), "r");          fp = fopen((const char*)fullPathName.mb_str(), "r");
84          if(fp == NULL) {          if(fp == NULL) {
85                  MN_FATAL_ERROR(wxT("fopen faild"));                  return false;  /* because of removed */
86          }          }
87    
88          /* TYPE search */          /* TYPE search */
# Line 114  WikiList* mnModel::search(const char* se Line 115  WikiList* mnModel::search(const char* se
115          WikiData*   wikiData;          WikiData*   wikiData;
116      WikiList*   list = new WikiList();      WikiList*   list = new WikiList();
117      wxString*   fileName = new wxString();      wxString*   fileName = new wxString();
118          char*       tokenList[32];          char*       tokenList[MAX_TOKEN];
119    
120          memset(tokenList, 0, sizeof(char*)*32);          memset(tokenList, 0, sizeof(char*)*MAX_TOKEN);
121          if( makeSearchToken(searchStr, tokenList) == false) return list;          if( makeSearchToken(searchStr, tokenList) == false) return list;
122    
123          dir = new wxDir(*wikiDataDir);          dir = new wxDir(*wikiDataDir);
# Line 145  WikiList* mnModel::search(const char* se Line 146  WikiList* mnModel::search(const char* se
146          return list;          return list;
147  }  }
148    
149    /*
150     *  add malon-type:xxx to search list
151     */
152  void mnModel::group()  void mnModel::group()
153  {  {
154          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          wxCSConv    conv(wxT(CODE_SET_SYSTEM));
# Line 198  void mnModel::group() Line 202  void mnModel::group()
202                                          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);                                          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
203    
204                                          typeToken = new wxString(outbuf, conv);                                          typeToken = new wxString(outbuf, conv);
205                                          addSearchStr(typeToken);                                          if( addSearchStr(typeToken) ) {
206                                                    WikiList* wikiList = search(typeToken->mb_str());
207                                                    addSearchList(typeToken, wikiList);
208                                            }
209                                          delete typeToken;                                          delete typeToken;
210                                          ptr = NULL;                                          ptr = NULL;
211                                  }                                  }
# Line 270  bool mnModel::typeSearch(char* typeStr, Line 277  bool mnModel::typeSearch(char* typeStr,
277          return false;          return false;
278  }  }
279    
280  void mnModel::addSearchStr(wxString* searchStr)  bool mnModel::addSearchStr(wxString* searchStr)
281  {  {
282          wxString *string;          wxString *string;
283    
# Line 278  void mnModel::addSearchStr(wxString* sea Line 285  void mnModel::addSearchStr(wxString* sea
285                  string = new wxString(searchStr->c_str());                  string = new wxString(searchStr->c_str());
286                  searchStrList->Add(*string, 1);                  searchStrList->Add(*string, 1);
287                  //searchStrList->Insert(*string, 0);                  //searchStrList->Insert(*string, 0);
288                    return true;  /* Add */
289          }          }
290            return false; /* does'nt add because of duplicating */
291  }  }
292    
293  void mnModel::addSearchList(wxString* searchStr, WikiList* list)  void mnModel::addSearchList(wxString* searchStr, WikiList* list)
# Line 290  void mnModel::removeSearchStr(wxString s Line 299  void mnModel::removeSearchStr(wxString s
299  {  {
300          if(searchStrList->Index(searchStr.c_str()) != wxNOT_FOUND) {          if(searchStrList->Index(searchStr.c_str()) != wxNOT_FOUND) {
301                  searchStrList->Remove(searchStr.c_str());                  searchStrList->Remove(searchStr.c_str());
302                    wikiHash[*searchStr] = NULL;
303          }          }
304  }  }
305    
# Line 302  void mnModel::modSearchStr(wxString* old Line 312  void mnModel::modSearchStr(wxString* old
312                  itemStr.sprintf(wxT("%s"), newStr->c_str());                  itemStr.sprintf(wxT("%s"), newStr->c_str());
313          }          }
314  }  }
315    
316    void mnModel::clearSearchStrList()
317    {
318            searchStrList->Clear();
319    }
320    
321    void mnModel::clearSearchResultList()
322    {
323            wikiHash.clear();
324    }
325    
326  const wxString* mnModel::getWikiDataDir()  const wxString* mnModel::getWikiDataDir()
327  {  {
328          return wikiDataDir;          return wikiDataDir;
# Line 330  void mnModel::addSearchResultList(wxStri Line 351  void mnModel::addSearchResultList(wxStri
351          WikiList::Node* node;          WikiList::Node* node;
352          WikiData* data;          WikiData* data;
353    
354          node = wikiList->GetFirst();          if(wikiList == NULL) {
355          if(!node) {                  MN_FATAL_ERROR(wxT("wikiList is null"));
356                  MN_FATAL_ERROR(wxT("Search Result List is empty"));                  return;
357          }          }
358    
359            node = wikiList->GetFirst();
360          while(node) {          while(node) {
361                  data = node->GetData();                  data = node->GetData();
362                  if(data == addData) return;                  if(data == addData) return;
363                  if( *(data->getSubject()) == *(addData->getSubject()) ) {                  if( *(data->getSubject()) == *(addData->getOldSubject()) ) {
364                          if(wikiList->DeleteObject(data)) {                          if(wikiList->DeleteObject(data)) {
365                                  delete data;                                  //delete data; /* may be wrong.. */
366                                  break;                                  break;
367                          }                          }
368                          else {                          else {
# Line 354  void mnModel::addSearchResultList(wxStri Line 376  void mnModel::addSearchResultList(wxStri
376          wikiList->Sort(compWikiData);          wikiList->Sort(compWikiData);
377  }  }
378    
379    bool mnModel::delSearchResultList(wxString* searchStr, WikiData* delData)
380    {
381            WikiList* wikiList = wikiHash[*searchStr];
382            WikiList::Node* node;
383            WikiData* data;
384            bool      found = false;
385    
386            if(wikiList == NULL) {
387                    MN_FATAL_ERROR(wxT("wikiList is null"));
388                    return false;
389            }
390    
391            node = wikiList->GetFirst();
392            while(node) {
393                    data = node->GetData();
394                    if(data == delData) {
395                            if(!wikiList->DeleteObject(data)) {
396                                    MN_FATAL_ERROR(wxT("Can't find delete data"));
397                            }
398                            found = true;
399                            break;
400                    }
401                    else if( *(data->getSubject()) == *(delData->getOldSubject()) ) {
402                            if(wikiList->DeleteObject(data)) {
403                                    //delete data;  /* may be wrong.. */
404                                    found = true;
405                                    break;
406                            }
407                            else {
408                                    MN_FATAL_ERROR(wxT("Can't find delete data"));
409                            }
410                    }
411                    node = node->GetNext();
412            }
413            wikiList->Sort(compWikiData);
414            return found;
415    }
416    
417  /******* WikiData ************************/  /******* WikiData ************************/
418  WikiData::WikiData(wxString* dataDir, wxString* inFileName)  WikiData::WikiData(wxString* dataDir, wxString* inFileName)
419  {  {
# Line 375  WikiData::WikiData(wxString* dataDir, wx Line 435  WikiData::WikiData(wxString* dataDir, wx
435    
436          text = NULL;          text = NULL;
437          memset(outbuf, 0, MAX_BUF_SIZE);          memset(outbuf, 0, MAX_BUF_SIZE);
438          fileName = new wxString(*inFileName);          fileName = new wxString(inFileName->mb_str(), conv);
439          dataDirName = dataDir;          dataDirName = new wxString(dataDir->mb_str(), conv);
440          decodeStr = decode(fileName->mb_str());          decodeStr = decode(fileName->mb_str());
441          inbufSize = strlen(decodeStr);          inbufSize = strlen(decodeStr);
442          outbufSize = sizeof(outbuf);          outbufSize = sizeof(outbuf);
443          iconv(codeSet, (ICONV_CONST char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&decodeStr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
444          subject  = new wxString((const char*)outbuf, conv);          subject  = new wxString((const char*)outbuf, conv);
445            oldSubject  = new wxString((const char*)outbuf, conv);
446          iconv_close(codeSet);          iconv_close(codeSet);
447    
448          date     = NULL;          date     = NULL;
# Line 400  WikiData::WikiData(wxString* dataDir, wx Line 461  WikiData::WikiData(wxString* dataDir, wx
461                  }                  }
462          }          }
463          fclose(fp);          fclose(fp);
464    
465            isWriteToFile = true;
466  }  }
467    
468  WikiData::WikiData(wxString* dataDir) {  WikiData::WikiData(wxString* dataDir) {
469            FILE*      fp;
470          time_t     now;          time_t     now;
471          char       buf[MAX_BUF_SIZE];          char       buf[MAX_BUF_SIZE];
472          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          char       fname[MAX_BUF_SIZE];
473            char       templateBuf[MAX_BUF_SIZE];
474            char*      inbufPtr;
475            int        inbufSize;
476            char       outbuf[MAX_BUF_SIZE];
477            char*      outbufPtr;
478            int        outbufSize;
479            wxCSConv   conv(wxT(CODE_SET_SYSTEM));
480    
481          dataDirName = dataDir;          dataDirName = new wxString(dataDir->mb_str(), conv);
482    
483      time(&now);      time(&now);
484          memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
485          strftime(buf, sizeof(buf), "%Y/%m/%d-%H%M%S",localtime(&now));          strftime(buf, sizeof(buf), "%Y/%m/%d-%H%M%S",localtime(&now));
486          subject  = new wxString(buf, conv);          subject  = new wxString(buf, conv);
487            oldSubject  = new wxString(buf, conv);
488    
489          fileName = new wxString(encode(buf), conv);          fileName = new wxString(encode(buf), conv);
490          fileName->Append(wxT(EXT_TAG));          fileName->Append(wxT(EXT_TAG));
# Line 420  WikiData::WikiData(wxString* dataDir) { Line 492  WikiData::WikiData(wxString* dataDir) {
492          memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));
493          strftime(buf, sizeof(buf), DATE_TAG "%Y/%m/%d %H:%M:%S",localtime(&now));          strftime(buf, sizeof(buf), DATE_TAG "%Y/%m/%d %H:%M:%S",localtime(&now));
494          date    = new wxString(buf, conv);          date    = new wxString(buf, conv);
495    
496            /* try to open template file */
497            snprintf(fname, sizeof(fname), "%s/%s", (const char*)(dataDir->mb_str()), NEW_DATA_TEMPLATE);
498            fp = fopen(fname, "r");
499            if(fp == NULL){
500                    memset(buf, 0, sizeof(buf));
501                    strftime(buf, sizeof(buf), NEW_DATA,localtime(&now));
502            }
503            else {
504                    memset(buf, 0, sizeof(buf));
505                    memset(templateBuf, 0, sizeof(templateBuf));
506                    memset(outbuf, 0, sizeof(outbuf));
507                    fread(templateBuf, sizeof(templateBuf), 1, fp);
508                    
509          memset(buf, 0, sizeof(buf));                  iconv_t codeSet = iconv_open(CODE_SET_SYSTEM, CODE_SET_EUC_JP);
510          strftime(buf, sizeof(buf), NEW_DATA,localtime(&now));                  if(codeSet == (iconv_t)-1) {
511                            MN_FATAL_ERROR(wxT("failed iconv_open"));
512                    }
513                    inbufPtr = templateBuf;
514                outbufPtr = outbuf;
515                    inbufSize = strlen(templateBuf);
516                    outbufSize = sizeof(outbuf);
517                    iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
518                    
519                    strftime(buf, sizeof(buf), outbuf,localtime(&now));
520    
521            }
522          text    = new wxString(buf, conv);          text    = new wxString(buf, conv);
523    
524            if(fp) fclose(fp);
525    
526            isWriteToFile = false;
527  }  }
528    
529  WikiData::~WikiData()  WikiData::~WikiData()
530  {  {
531          delete subject;          delete subject;
532            delete oldSubject;
533          delete fileName;          delete fileName;
534          delete date;          delete date;
535          delete text;          delete text;
536            delete dataDirName;
537  }  }
538    
539  const wxString* WikiData::getFileName()  const wxString* WikiData::getFileName()
# Line 445  const wxString* WikiData::getSubject() Line 546  const wxString* WikiData::getSubject()
546          return subject;          return subject;
547  }  }
548    
549    const wxString* WikiData::getOldSubject()
550    {
551            return oldSubject;
552    }
553    
554    void WikiData::setOldSubjectFromCurrent()
555    {
556            oldSubject = new wxString(*subject);
557    }
558    
559  void WikiData::modSubject(wxString* newSubject)  void WikiData::modSubject(wxString* newSubject)
560  {  {
561          wxCSConv    conv(wxT(CODE_SET_SYSTEM));          wxCSConv    conv(wxT(CODE_SET_SYSTEM));
562          wxString*   oldFileName = fileName;          wxString*   oldFileName = fileName;
         wxString*   oldSubject  = subject;  
563          char        oldFullPath[MAX_BUF_SIZE];          char        oldFullPath[MAX_BUF_SIZE];
564          char        newFullPath[MAX_BUF_SIZE];          char        newFullPath[MAX_BUF_SIZE];
565          iconv_t     codeSet;          iconv_t     codeSet;
# Line 461  void WikiData::modSubject(wxString* newS Line 571  void WikiData::modSubject(wxString* newS
571          int         outbufSize = sizeof(outbuf);          int         outbufSize = sizeof(outbuf);
572          FILE*       fp;          FILE*       fp;
573    
574            oldSubject = subject;
575    
576          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
577          memset(inbuf,  0, sizeof(inbuf));          memset(inbuf,  0, sizeof(inbuf));
578          strcpy(inbuf, (const char*)newSubject->mb_str());          strcpy(inbuf, (const char*)newSubject->mb_str());
# Line 489  void WikiData::modSubject(wxString* newS Line 601  void WikiData::modSubject(wxString* newS
601                  fclose(fp);                  fclose(fp);
602          }          }
603    
         delete oldSubject;  
604          delete oldFileName;          delete oldFileName;
605  }  }
606    
# Line 518  const wxString* WikiData::getText() Line 629  const wxString* WikiData::getText()
629                  MN_FATAL_ERROR(wxT("failed iconv_open"));                  MN_FATAL_ERROR(wxT("failed iconv_open"));
630          }          }
631    
632          if(text) {          if(text && isWriteToFile == true) {
633                  iconv_close(codeSet);                  delete text;
634                    text = NULL;
635            }
636            else if(text && isWriteToFile == false) {
637                  return text;                  return text;
638          }          }
639    
# Line 531  const wxString* WikiData::getText() Line 645  const wxString* WikiData::getText()
645          }          }
646    
647          while(fgets(buf, MAX_BUF_SIZE, fp)) {          while(fgets(buf, MAX_BUF_SIZE, fp)) {
 #ifdef __WXMAC__  
                 for(int i = 0; buf[i] != 0; i++) if(buf[i] == (char)MAC_BACKSLASH) buf[i] = '\\';  
 #endif  
648                  inbufPtr = buf;                  inbufPtr = buf;
649                  inbufSize = sizeof(buf);                  inbufSize = sizeof(buf);
650                  outbufPtr = outbuf;                  outbufPtr = outbuf;
# Line 555  void WikiData::modText(wxString* intext) Line 666  void WikiData::modText(wxString* intext)
666          wxCSConv conv(wxT(CODE_SET_SYSTEM));          wxCSConv conv(wxT(CODE_SET_SYSTEM));
667          delete text;          delete text;
668          //text = new wxString(intext->c_str());          //text = new wxString(intext->c_str());
669          text = new wxString(*intext);          //text = new wxString(*intext);
670          //text = new wxString(intext->mb_str(), conv);          text = new wxString(intext->mb_str(), conv);
671  }  }
672    
673  void WikiData::removeDataFile()  void WikiData::removeDataFile()
# Line 574  void WikiData::save() Line 685  void WikiData::save()
685          char fullPath[MAX_BUF_SIZE];          char fullPath[MAX_BUF_SIZE];
686          FILE* fp;          FILE* fp;
687          iconv_t     codeSet;          iconv_t     codeSet;
688          char        inbuf[MAX_WIKI_TEXT_SIZE];          char*        inbuf;
689          char        outbuf[MAX_WIKI_TEXT_SIZE];          char*        outbuf;
690          const char*       inbufPtr;          const char*  inbufPtr;
691          char*       outbufPtr;          char*       outbufPtr;
692          int         inbufSize;          int         inbufSize;
693          int         outbufSize;          int         outbufSize;
694    
695            inbuf  = (char*)malloc(MAX_WIKI_TEXT_SIZE);
696            outbuf = (char*)malloc(MAX_WIKI_TEXT_SIZE);
697            if(inbuf == NULL || outbuf == NULL) {
698                    MN_FATAL_ERROR(wxT("It's too big data. Max size is 5MB."));
699            }
700    
701          codeSet = iconv_open(CODE_SET_EUC_JP, CODE_SET_SYSTEM);          codeSet = iconv_open(CODE_SET_EUC_JP, CODE_SET_SYSTEM);
702          if(codeSet == (iconv_t)-1) {          if(codeSet == (iconv_t)-1) {
703                  MN_FATAL_ERROR(wxT("failed iconv_open"));                  MN_FATAL_ERROR(wxT("failed iconv_open"));
# Line 592  void WikiData::save() Line 709  void WikiData::save()
709                  MN_FATAL_ERROR(wxT("File open error."));                  MN_FATAL_ERROR(wxT("File open error."));
710          }          }
711    
712          memset(inbuf, 0, sizeof(inbuf));          memset(inbuf, 0, MAX_WIKI_TEXT_SIZE);
713          strcpy(inbuf,(const char*)text->mb_str());          strcpy(inbuf,(const char*)text->mb_str());
714    
715  #ifdef __WXMAC__  //#ifdef __WXMAC__
716          for(int i = 0; inbuf[i] != 0; i++) if(inbuf[i] == (char)MAC_BACKSLASH) inbuf[i] = '\\';  //      for(int i = 0; inbuf[i] != 0; i++) if(inbuf[i] == (char)MAC_BACKSLASH) inbuf[i] = '\\';
717  #endif  //#endif
718    
719          inbufPtr = inbuf;          inbufPtr = inbuf;
720          inbufSize = strlen(inbufPtr);          inbufSize = strlen(inbufPtr);
721          outbufPtr = outbuf;          outbufPtr = outbuf;
722          outbufSize = sizeof(outbuf);          outbufSize = MAX_WIKI_TEXT_SIZE;
723          memset(outbuf, 0, outbufSize);          memset(outbuf, 0, outbufSize);
724          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);          iconv(codeSet, (ICONV_CONST char**)&inbufPtr, (size_t*)&inbufSize, &outbufPtr, (size_t*)&outbufSize);
725          fwrite(outbuf, sizeof(outbuf)-outbufSize, 1, fp);          if(inbufSize != 0) { // iconv error
726                    wxMessageBox(wxT("Fail to save, because this memo include KISHU-IZON-MOJI.\nPlease remove KISHU-IZON-MOJI, and try again"), wxT("Fail to save"), wxOK|wxICON_WARNING);
727            }
728            fwrite(outbuf, MAX_WIKI_TEXT_SIZE-outbufSize, 1, fp);
729          fclose(fp);          fclose(fp);
730          iconv_close(codeSet);          iconv_close(codeSet);
731            
732            free(inbuf);
733            free(outbuf);
734            
735            isWriteToFile = true;
736  }  }
737    
738  /******* Tools ************************/  /******* Tools ************************/

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.30

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