Revision: 4035
http://svn.sourceforge.net/winmerge/?rev=4035&view=rev
Author: kimmov
Date: 2007-01-11 11:51:37 -0800 (Thu, 11 Jan 2007)
Log Message:
-----------
BUG: [ 1616838 ] Directory filter broken?
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 2007-01-11 13:57:37 UTC (rev 4034)
+++ branches/R2_6/Src/Changes.txt 2007-01-11 19:51:37 UTC (rev 4035)
@@ -2,6 +2,10 @@
Add new items to top.
(This summarizes all changes to all files under Src, including Src\Languages.)
+2007-01-11 Kimmo
+ BUG: [ 1616838 ] Directory filter broken?
+ Src: FileFilterMgr.cpp
+
2007-01-11 Gal
BUG: [ 1602313 ] WinMerge stays in tasklist after closing
Src: MainFrm.cpp MainFrm.h
Modified: branches/R2_6/Src/FileFilterMgr.cpp
===================================================================
--- branches/R2_6/Src/FileFilterMgr.cpp 2007-01-11 13:57:37 UTC (rev 4034)
+++ branches/R2_6/Src/FileFilterMgr.cpp 2007-01-11 19:51:37 UTC (rev 4035)
@@ -27,8 +27,6 @@
static char THIS_FILE[] = __FILE__;
#endif
-static void FileFilterToUppercase(CString & filterStr);
-
/**
* @brief Deletes items from filter list.
*
@@ -152,50 +150,17 @@
}
/**
- * @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.
* @param [in] str Temporary variable (ie, it may be altered)
+ * @note Regular expressions are converted to lower case. We do it so that
+ * we don't break them by uppercasing escaped control chars (e.g "\d").
*/
static void AddFilterPattern(FileFilterList & filterList, CString & str)
{
LPCTSTR commentLeader = _T("##"); // Starts comment
- FileFilterToUppercase(str);
+ str.MakeLower();
str.TrimLeft();
// Ignore lines beginning with '##'
@@ -325,7 +290,7 @@
/**
* @brief Test given string against given regexp list.
- *
+ * We store regular expression as lower case.
* @param [in] filterList List of regexps to test against.
* @param [in] szTest String to test against regexps.
* @return TRUE if string passes
@@ -334,7 +299,7 @@
BOOL TestAgainstRegList(const FileFilterList & filterList, LPCTSTR szTest)
{
CString str = szTest;
- str.MakeUpper();
+ str.MakeLower(); // Make lower case as regexp was convereted also.
for (POSITION pos = filterList.GetHeadPosition(); pos; )
{
const FileFilterElement & elem = filterList.GetNext(pos);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|