[Winmerge-svn] SF.net SVN: winmerge: [3891] branches/R2_6/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2006-12-03 10:53:27
|
Revision: 3891 http://svn.sourceforge.net/winmerge/?rev=3891&view=rev Author: kimmov Date: 2006-12-03 02:53:22 -0800 (Sun, 03 Dec 2006) Log Message: ----------- PATCH: [ 1607343 ] Fix filefilter regexp uppercasing for 2.6 branch Modified Paths: -------------- branches/R2_6/Src/Changes.txt branches/R2_6/Src/FileFilterMgr.cpp Modified: branches/R2_6/Src/Changes.txt =================================================================== --- branches/R2_6/Src/Changes.txt 2006-12-02 22:51:58 UTC (rev 3890) +++ branches/R2_6/Src/Changes.txt 2006-12-03 10:53:22 UTC (rev 3891) @@ -2,9 +2,13 @@ Add new items to top. (This summarizes all changes to all files under Src, including Src\Languages.) +2006-12-03 Kimmo + PATCH: [ 1607343 ] Fix filefilter regexp uppercasing for 2.6 branch + Src: FileFilterMgr.cpp + 2006-12-02 Takashi BUG: [ 1589324 ] WinMegee crashes on copy - Src: FileFilterMgr.cpp + Src: Common/CShellFileOp.cpp 2006-12-02 Takashi BUG: [ 1603077 ] Doesn't filter the file vc60.idb using "Merge_VC_loose.flt" Modified: branches/R2_6/Src/FileFilterMgr.cpp =================================================================== --- branches/R2_6/Src/FileFilterMgr.cpp 2006-12-02 22:51:58 UTC (rev 3890) +++ branches/R2_6/Src/FileFilterMgr.cpp 2006-12-03 10:53:22 UTC (rev 3891) @@ -27,6 +27,8 @@ static char THIS_FILE[] = __FILE__; #endif +static void FileFilterToUppercase(CString & filterStr); + /** * @brief Deletes items from filter list. * @@ -150,6 +152,41 @@ } /** + * @brief Convert filter string to uppercase. + * This function converts given filter string to upper case. The function + * does not convert regexp control chars (e.g. '\d') or chars after comment + * separator. + * @param [in,out] filterStr Filter string to convert. + */ +static void FileFilterToUppercase(CString & filterStr) +{ + int ind = 0; + const int len = filterStr.GetLength(); + BOOL bContinue = TRUE; + + while (ind < len && bContinue) + { + // Check if it is comment separator "[space]##" + if (ind > 2 && _istspace(ind - 2) && filterStr[ind - 1] == '#' && + filterStr[ind] == '#') + { + bContinue = FALSE; + } + + // We make all other chars in regexp uppercase, except escaped + // regexp control chars, e.g. "\d". + TCHAR ch = filterStr[ind]; + BOOL bAlpha = _istalpha(ch); + if (bContinue && bAlpha && (ind == 0 || filterStr[ind - 1] != '\\')) + { + ch = _totupper(ch); + filterStr.SetAt(ind, ch); + } + ++ind; + } +} + +/** * @brief Add a single pattern (if nonempty & valid) to a pattern list. * * @param [in] filterList List where pattern is added. @@ -158,7 +195,7 @@ static void AddFilterPattern(FileFilterList & filterList, CString & str) { LPCTSTR commentLeader = _T("##"); // Starts comment - str.MakeUpper(); + FileFilterToUppercase(str); str.TrimLeft(); // Ignore lines beginning with '##' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |