[Winmerge-svn] SF.net SVN: winmerge: [4079] trunk/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2007-01-26 14:57:02
|
Revision: 4079 http://svn.sourceforge.net/winmerge/?rev=4079&view=rev Author: kimmov Date: 2007-01-26 06:56:58 -0800 (Fri, 26 Jan 2007) Log Message: ----------- PATCH: [ 1644668 ] Fix ANSI regexps Modified Paths: -------------- trunk/Src/Changes.txt trunk/Src/DiffWrapper.cpp trunk/Src/FileFilterHelper.cpp trunk/Src/FilterList.cpp trunk/Src/FilterList.h Modified: trunk/Src/Changes.txt =================================================================== --- trunk/Src/Changes.txt 2007-01-25 22:48:05 UTC (rev 4078) +++ trunk/Src/Changes.txt 2007-01-26 14:56:58 UTC (rev 4079) @@ -2,6 +2,10 @@ Add new items to top. (This summarizes all changes to all files under Src, including Src\Languages.) +2007-01-25 Kimmo + PATCH: [ 1644668 ] Fix ANSI regexps + Src: DiffWrapper.cpp FileFilterHelper.cpp FilterList.cpp FilterList.h + 2007-01-25 Tim PATCH: [ 1644785 ] 24bit icons for "Window" menu Based on icons by Alexander Skinner Modified: trunk/Src/DiffWrapper.cpp =================================================================== --- trunk/Src/DiffWrapper.cpp 2007-01-25 22:48:05 UTC (rev 4078) +++ trunk/Src/DiffWrapper.cpp 2007-01-26 14:56:58 UTC (rev 4079) @@ -1149,7 +1149,6 @@ int line = StartPos; while (line <= EndPos && linesMatch == true) - // for (int i = StartPos; i <= EndPos; i++) { std::string LineData(files[FileNo].linbuf[line]); size_t EolPos = LineData.find_first_of(EolIndicators); @@ -1396,18 +1395,32 @@ m_pFilterList->RemoveAllFilters(); if (!filterStr.IsEmpty()) { - char * regexp_utf = UCS2UTF8_ConvertToUtf8(filterStr); + char * regexp_str; + FilterList::EncodingType type; + +#ifdef UNICODE + regexp_str = UCS2UTF8_ConvertToUtf8(filterStr); + type = FilterList::ENC_UTF8; +#else + CString tmp_str(filterStr); + regexp_str = tmp_str.GetBuffer(); + type = FilterList::ENC_ANSI; +#endif // Add every "line" of regexps to regexp list char * token; const char sep[] = "\r\n"; - token = strtok(regexp_utf, sep); + token = strtok(regexp_str, sep); while (token) { - m_pFilterList->AddRegExp(token); + m_pFilterList->AddRegExp(token, type); token = strtok(NULL, sep); } - UCS2UTF8_Dealloc(regexp_utf); +#ifdef UNICODE + UCS2UTF8_Dealloc(regexp_str); +#else + tmp_str.ReleaseBuffer(); +#endif } } Modified: trunk/Src/FileFilterHelper.cpp =================================================================== --- trunk/Src/FileFilterHelper.cpp 2007-01-25 22:48:05 UTC (rev 4078) +++ trunk/Src/FileFilterHelper.cpp 2007-01-26 14:56:58 UTC (rev 4079) @@ -207,9 +207,23 @@ m_sMask = strMask; CString regExp = ParseExtensions(strMask); - char * regexp_utf = UCS2UTF8_ConvertToUtf8(regExp); - m_pMaskFilter->AddRegExp(regexp_utf); - UCS2UTF8_Dealloc(regexp_utf); + char * regexp_str; + FilterList::EncodingType type; + +#ifdef UNICODE + regexp_str = UCS2UTF8_ConvertToUtf8(regExp); + type = FilterList::ENC_UTF8; +#else + regexp_str = regExp.GetBuffer(); +#endif + + m_pMaskFilter->AddRegExp(regexp_str, type); + +#ifdef UNICODE + UCS2UTF8_Dealloc(regexp_str); +#else + regExp.ReleaseBuffer(); +#endif } /** Modified: trunk/Src/FilterList.cpp =================================================================== --- trunk/Src/FilterList.cpp 2007-01-25 22:48:05 UTC (rev 4078) +++ trunk/Src/FilterList.cpp 2007-01-26 14:56:58 UTC (rev 4079) @@ -32,16 +32,24 @@ * @brief Add new regular expression to the list. * This function adds new regular expression to the list of expressions. * The regular expression is compiled and studied for better performance. - * @param [in] regularExpression Regular expression as UTF-8 string. + * @param [in] regularExpression Regular expression string. + * @param [in] encoding Expression encoding. */ -void FilterList::AddRegExp(const char * regularExpression) +void FilterList::AddRegExp(const char * regularExpression, EncodingType encoding) { filter_item item; item.filterAsString = strdup(regularExpression); const char * errormsg = NULL; int erroroffset = 0; - pcre *regexp = pcre_compile(regularExpression, PCRE_UTF8, &errormsg, + int pcre_flags = 0; + + if (encoding == ENC_UTF8) + pcre_flags |= PCRE_UTF8; + else if (encoding != ENC_ANSI) + _RPTF0(_CRT_ERROR, "Unregognized regexp encoding!"); + + pcre *regexp = pcre_compile(regularExpression, pcre_flags, &errormsg, &erroroffset, NULL); if (regexp) { Modified: trunk/Src/FilterList.h =================================================================== --- trunk/Src/FilterList.h 2007-01-25 22:48:05 UTC (rev 4078) +++ trunk/Src/FilterList.h 2007-01-26 14:56:58 UTC (rev 4079) @@ -34,10 +34,16 @@ class FilterList { public: + enum EncodingType + { + ENC_ANSI, + ENC_UTF8, + }; + FilterList(); ~FilterList(); - void AddRegExp(const char *regularExpression); + void AddRegExp(const char *regularExpression, EncodingType encoding); void RemoveAllFilters(); bool HasRegExps(); bool Match(const char *string); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |