void scContUnit::Iter( SubstituteFunc func, long startLocation, long& limitOffset ) { UCS2 chBuf[64]; UCS2* chP; CharRecordP startChRec; scSpecRecord* specRec; long startOffset, endOffset, wordLen; LockMem( startChRec, specRec ); startOffset = startLocation; endOffset = startOffset; for ( ; endOffset < limitOffset; ) { startOffset = TXTStartSelectableWord( startChRec, endOffset ); endOffset = TXTEndSelectableWord( startChRec, endOffset ); wordLen = endOffset - startOffset; if ( wordLen > 1 ) { BuildTestWord( chBuf, startChRec + startOffset, wordLen ); status stat = (*func)( &chP, chBuf, NULL ); if ( stat == scSuccess || stat == scUserAbort ) { if ( !ReplaceWord( startChRec, specRec, startOffset, endOffset, limitOffset, chBuf, chP ) ) { UnlockMem( ); return; } fCharArray.RepairText( fSpecRun, startOffset, endOffset ); Mark( scREBREAK ); if ( stat == scUserAbort ) goto exit; } } endOffset = FindNextSpellingWord( startChRec, endOffset, limitOffset ); } exit: UnlockMem( ); }
void PPToken::processArgs(const wxString &argsList) { args = wxStringTokenize(argsList, wxT(","), wxTOKEN_STRTOK); // replace all occurances of 'arg' with %1, %2 etc for(size_t i=0; i<args.GetCount(); i++) { wxString replaceWith = wxString::Format(wxT("%%%d"), (int)i); #if wxVERSION_NUMBER < 2900 replacement = ReplaceWord(replacement, args.Item(i), replaceWith); #else std::string res = ReplaceWordA(replacement.To8BitData().data(), args.Item(i).To8BitData().data(), replaceWith.To8BitData().data()); if(res.empty()) { replacement.clear(); } else { replacement = wxString::From8BitData(res.c_str()); } #endif } }
//***************************************************************************** // 문자열의 모든 치환 대상을 치환시킨다. // // Paremeters // char *szDest : 치환이 끝난 문자열을 담을 포인터 // char *szSrc : 치환시킬 문자열 // int nMaxLength : 치환시킨 후의 내용을 담을 최대 길이 // Return Values // bool : 하나라도 치환을 했는지 여부 // Remark // 치환후 길이가 nMaxLength 보다 길어지면 ''로 치환시킨다. // ReplaceWord에서 szDest에 들어갈 문자열이 szSrc의 문자열보다 10배 이상 // 길면 에러가 나게 된다. 주의!! (예 : A를 ABCDEFGHIJK로 치환시키면 에러!) // 무한 치환이 되지 않도록 주의할 것! (예 : A를 AA로 치환하면 무한 치환한다!) //***************************************************************************** bool ITextFilter::Replace(char *szDest, char *szSrc, int nMaxLength) { if (!IsHaveReplace(szSrc)) { GetStringPart(szDest, szSrc, nMaxLength); return false; } char *l_szStr = (char*) malloc(strlen(szSrc) + 1); strcpy(l_szStr, szSrc); while (IsHaveReplace(l_szStr)) { char *l_szTargetOffset = NULL, *l_szTargetString = NULL, *l_szReplaceString = NULL; int l_nTargetLength = 0; // 바꿔야 할 스트링을 l_szTargetString에 저장. l_szTargetOffset = GetReplaceTarget(&l_nTargetLength, l_szStr); l_szTargetString = (char*) malloc(l_nTargetLength + 1); GetStringPart(l_szTargetString, l_szTargetOffset, l_nTargetLength); // 바뀐 뒤의 스트링을 l_szReplaceString에 저장. l_szReplaceString = (char*) malloc(l_nTargetLength * 10 + 1); ReplaceWord(l_szReplaceString, l_szTargetString, l_nTargetLength * 10); // 치환했을 경우 nMaxLength를 넘어가지 않는지 검사. if (strlen(l_szStr) + strlen(l_szReplaceString) - strlen(l_szTargetString) > nMaxLength) strcpy(l_szReplaceString, ""); // 치환 strcpy(l_szTargetOffset + strlen(l_szReplaceString), l_szTargetOffset + strlen(l_szTargetString)); memcpy(l_szTargetOffset, l_szReplaceString, strlen(l_szReplaceString)); free(l_szTargetString); free(l_szReplaceString); } GetStringPart(szDest, l_szStr, nMaxLength); free (l_szStr); return true; }
bool CLReplacePattern(const wxString& in, const wxString& pattern, const wxString& replaceWith, wxString &outStr) { int where = pattern.Find(wxT("%0")); if(where != wxNOT_FOUND) { wxString replacement(replaceWith); // a patterened expression wxString searchFor = pattern.BeforeFirst(wxT('(')); where = in.Find(searchFor); if(where == wxNOT_FOUND) { return false; } wxString initList; wxArrayString initListArr; if(PPToken::readInitList(in, searchFor.Length() + where, initList, initListArr) == false) return false; outStr = in; // update the 'replacement' with the actual values ( replace %0..%n) for(size_t i=0; i<initListArr.size(); i++) { wxString placeHolder; placeHolder << wxT("%") << i; replacement.Replace(placeHolder, initListArr.Item(i)); } outStr.Remove(where, searchFor.Length() + initList.Length()); outStr.insert(where, replacement); return true; } else { if(in.Find(pattern) == wxNOT_FOUND) { return false; } // simple replacement outStr = ReplaceWord(in, pattern, replaceWith); return outStr != in; } }
void CFileDetailDialog::OnBnClickedButtonStrip(wxCommandEvent& WXUNUSED(evt)) { wxString filename; filename = CastChild(IDC_FILENAME, wxTextCtrl)->GetValue(); int extpos = filename.Find('.', true); wxString ext; if (extpos > 0) { // get the extension - we do not modify it except make it lowercase ext = filename.Mid(extpos); ext.MakeLower(); // get rid of extension and replace . with space filename.Truncate(extpos); filename.Replace(wxT("."),wxT(" ")); } // Replace Space-holders with Spaces filename.Replace(wxT("_"),wxT(" ")); filename.Replace(wxT("%20"),wxT(" ")); // Some additional formatting filename.Replace(wxT("hYPNOTiC"), wxEmptyString); filename.MakeLower(); filename.Replace(wxT("xxx"), wxT("XXX")); // filename.Replace(wxT("xdmnx"), wxEmptyString); // filename.Replace(wxT("pmp"), wxEmptyString); // filename.Replace(wxT("dws"), wxEmptyString); filename.Replace(wxT("www pornreactor com"), wxEmptyString); filename.Replace(wxT("sharereactor"), wxEmptyString); filename.Replace(wxT("found via www filedonkey com"), wxEmptyString); filename.Replace(wxT("deviance"), wxEmptyString); filename.Replace(wxT("adunanza"), wxEmptyString); filename.Replace(wxT("-ftv"), wxEmptyString); filename.Replace(wxT("flt"), wxEmptyString); filename.Replace(wxT("[]"), wxEmptyString); filename.Replace(wxT("()"), wxEmptyString); // Change CD, CD#, VCD{,#}, DVD{,#}, ISO, PC to uppercase ReplaceWord(filename, wxT("cd"), wxT("CD"), true); ReplaceWord(filename, wxT("vcd"), wxT("VCD"), true); ReplaceWord(filename, wxT("dvd"), wxT("DVD"), true); ReplaceWord(filename, wxT("iso"), wxT("ISO"), false); ReplaceWord(filename, wxT("pc"), wxT("PC"), false); // Make leading Caps // and delete 1+ spaces if (filename.Length()>1) { bool last_char_space = true; bool last_char_wordseparator = true; unsigned int i = 0; do { wxChar c = filename.GetChar(i); if (c == ' ') { if (last_char_space) { filename.Remove(i, 1); i--; } else { last_char_space = true; } } else if (c == '.') { if (last_char_space && i > 0) { i--; filename.Remove(i, 1); } last_char_space = false; } else { if (last_char_wordseparator) { wxString tempStr(c); tempStr.MakeUpper(); filename.SetChar(i, tempStr.GetChar(0)); last_char_space = false; } } last_char_wordseparator = IsWordSeparator(c); i++; } while (i < filename.Length()); if (last_char_space && i > 0) { filename.Remove(i-1, 1); } } // should stay lowercase ReplaceWord(filename, wxT("By"), wxT("by")); // re-add extension filename += ext; setValueForFilenameTextEdit(filename); }