[Winmerge-svn] SF.net SVN: winmerge: [4091] trunk/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2007-02-01 18:54:24
|
Revision: 4091 http://svn.sourceforge.net/winmerge/?rev=4091&view=rev Author: kimmov Date: 2007-02-01 10:54:23 -0800 (Thu, 01 Feb 2007) Log Message: ----------- PATCH: [ 1650043 ] Convert CDiffWrapper to use CompareOptions Modified Paths: -------------- trunk/Src/Changes.txt trunk/Src/CompareOptions.cpp trunk/Src/CompareOptions.h trunk/Src/DiffWrapper.cpp trunk/Src/DiffWrapper.h Modified: trunk/Src/Changes.txt =================================================================== --- trunk/Src/Changes.txt 2007-02-01 18:51:40 UTC (rev 4090) +++ trunk/Src/Changes.txt 2007-02-01 18:54:23 UTC (rev 4091) @@ -10,6 +10,8 @@ Submitted by tigertron Src/Languages/Bulgarian: MergeBulgarian.rc Docs/Users/Languages: Readme-Bulgarian.txt + PATCH: [ 1650043 ] Convert CDiffWrapper to use CompareOptions + Src: CompareOptions.cpp CompareOptions.h DiffWrapper.cpp DiffWrapper.h 2007-01-31 Kimmo PATCH: [ 1648182 ] Separate Compare options from DiffWrapper Modified: trunk/Src/CompareOptions.cpp =================================================================== --- trunk/Src/CompareOptions.cpp 2007-02-01 18:51:40 UTC (rev 4090) +++ trunk/Src/CompareOptions.cpp 2007-02-01 18:54:23 UTC (rev 4091) @@ -128,3 +128,31 @@ heuristic = 1; recursive = 0; } + +/** + * @brief Gets options to DIFFOPTIONS structure. + * @param [out] options Diffutils options. + */ +void DiffutilsOptions::GetAsDiffOptions(DIFFOPTIONS &options) +{ + options.bFilterCommentsLines = m_filterCommentsLines; + options.bIgnoreBlankLines = m_bIgnoreBlankLines; + options.bIgnoreCase = m_bIgnoreCase; + options.bIgnoreEol = m_bIgnoreEOLDifference; + + switch (m_ignoreWhitespace) + { + case WHITESPACE_COMPARE_ALL: + options.nIgnoreWhitespace = 0; + break; + case WHITESPACE_IGNORE_CHANGE: + options.nIgnoreWhitespace = 1; + break; + case WHITESPACE_IGNORE_ALL: + options.nIgnoreWhitespace = 2; + break; + default: + _RPTF0(_CRT_ERROR, "Unknown whitespace ignore value!"); + break; + } +} Modified: trunk/Src/CompareOptions.h =================================================================== --- trunk/Src/CompareOptions.h 2007-02-01 18:51:40 UTC (rev 4090) +++ trunk/Src/CompareOptions.h 2007-02-01 18:54:23 UTC (rev 4091) @@ -101,6 +101,7 @@ DiffutilsOptions(); void SetFromDiffOptions(const DIFFOPTIONS & options); void SetToDiffUtils(); + void GetAsDiffOptions(DIFFOPTIONS &options); enum DiffOutputType m_outputStyle; /**< Output style (for patch files) */ int m_contextLines; /**< Number of context lines (for patch files) */ Modified: trunk/Src/DiffWrapper.cpp =================================================================== --- trunk/Src/DiffWrapper.cpp 2007-02-01 18:51:40 UTC (rev 4090) +++ trunk/Src/DiffWrapper.cpp 2007-02-01 18:54:23 UTC (rev 4091) @@ -41,7 +41,6 @@ #include "paths.h" #include "CompareOptions.h" #include "FileTextStats.h" -//#include "DiffFileData.h" #include "FolderCmp.h" #include "FilterCommentsManager.h" @@ -91,13 +90,7 @@ , m_pMovedLines(NULL) , m_pFilterList(NULL) { - ZeroMemory(&m_settings, sizeof(DIFFSETTINGS)); - ZeroMemory(&m_globalSettings, sizeof(DIFFSETTINGS)); ZeroMemory(&m_status, sizeof(DIFFSTATUS)); - m_settings.heuristic = 1; - m_settings.outputStyle = OUTPUT_NORMAL; - m_settings.context = -1; - // character that ends a line. Currently this is always `\n' line_end_char = '\n'; } @@ -161,10 +154,13 @@ * format used outside CDiffWrapper and returns them. * @param [in,out] options Pointer to structure getting used options. */ -void CDiffWrapper::GetOptions(DIFFOPTIONS *options) const +void CDiffWrapper::GetOptions(DIFFOPTIONS *options) { ASSERT(options); - InternalGetOptions(options); + DIFFOPTIONS tmpOptions = {0}; + m_options.GetAsDiffOptions(tmpOptions); + *options = tmpOptions; +// InternalGetOptions(options); } /** @@ -176,7 +172,8 @@ void CDiffWrapper::SetOptions(const DIFFOPTIONS *options) { ASSERT(options); - InternalSetOptions(options); + m_options.SetFromDiffOptions(*options); +// InternalSetOptions(options); } /** @@ -210,8 +207,24 @@ void CDiffWrapper::SetPatchOptions(const PATCHOPTIONS *options) { ASSERT(options); - m_settings.context = options->nContext; - m_settings.outputStyle = options->outputStyle; + m_options.m_contextLines = options->nContext; + + switch (options->outputStyle) + { + case OUTPUT_NORMAL: + m_options.m_outputStyle = DIFF_OUTPUT_NORMAL; + break; + case OUTPUT_CONTEXT: + m_options.m_outputStyle = DIFF_OUTPUT_CONTEXT; + break; + case OUTPUT_UNIFIED: + m_options.m_outputStyle = DIFF_OUTPUT_UNIFIED; + break; + default: + _RPTF0(_CRT_ERROR, "Unknown output style!"); + break; + } + m_bAddCmdLine = options->bAddCommandline; } @@ -653,7 +666,9 @@ USES_CONVERSION; CString strFile1Temp = filepath1; CString strFile2Temp = filepath2; - SwapToInternalSettings(); + + m_options.SetToDiffUtils(); + //SwapToInternalSettings(); if (m_bUseDiffList) m_nDiffs = m_pDiffList->GetSize(); @@ -800,115 +815,11 @@ strFile2Temp.Empty(); } - SwapToGlobalSettings(); +// SwapToGlobalSettings(); return bRet; } /** - * @brief Return current diffutils options - */ -void CDiffWrapper::InternalGetOptions(DIFFOPTIONS *options) const -{ - int nIgnoreWhitespace = 0; - - if (m_settings.ignoreAllSpace) - nIgnoreWhitespace = WHITESPACE_IGNORE_ALL; - else if (m_settings.ignoreSpaceChange) - nIgnoreWhitespace = WHITESPACE_IGNORE_CHANGE; - - options->nIgnoreWhitespace = nIgnoreWhitespace; - options->bIgnoreBlankLines = m_settings.ignoreBlankLines; - options->bFilterCommentsLines = m_settings.filterCommentsLines; - options->bIgnoreCase = m_settings.ignoreCase; - options->bIgnoreEol = m_settings.ignoreEOLDiff; - -} - -/** - * @brief Set diffutils options - */ -void CDiffWrapper::InternalSetOptions(const DIFFOPTIONS *options) -{ - m_settings.ignoreAllSpace = (options->nIgnoreWhitespace == WHITESPACE_IGNORE_ALL); - m_settings.ignoreSpaceChange = (options->nIgnoreWhitespace == WHITESPACE_IGNORE_CHANGE); - m_settings.ignoreBlankLines = options->bIgnoreBlankLines; - m_settings.filterCommentsLines = options->bFilterCommentsLines; - m_settings.ignoreEOLDiff = options->bIgnoreEol; - m_settings.ignoreCase = options->bIgnoreCase; - m_settings.ignoreSomeChanges = (options->nIgnoreWhitespace != WHITESPACE_COMPARE_ALL) || - options->bIgnoreCase || options->bIgnoreBlankLines || - options->bIgnoreEol; - m_settings.lengthVaries = (options->nIgnoreWhitespace != WHITESPACE_COMPARE_ALL); -} - -/** - * @brief Replaces global options used by diff-engine with options in diff-wrapper - */ -void CDiffWrapper::SwapToInternalSettings() -{ - // Save current settings to temp variables - m_globalSettings.outputStyle = output_style; - output_style = m_settings.outputStyle; - - m_globalSettings.context = context; - context = m_settings.context; - - m_globalSettings.alwaysText = always_text_flag; - always_text_flag = m_settings.alwaysText; - - m_globalSettings.horizLines = horizon_lines; - horizon_lines = m_settings.horizLines; - - m_globalSettings.ignoreSpaceChange = ignore_space_change_flag; - ignore_space_change_flag = m_settings.ignoreSpaceChange; - - m_globalSettings.ignoreAllSpace = ignore_all_space_flag; - ignore_all_space_flag = m_settings.ignoreAllSpace; - - m_globalSettings.ignoreBlankLines = ignore_blank_lines_flag; - ignore_blank_lines_flag = m_settings.ignoreBlankLines; - - m_globalSettings.ignoreCase = ignore_case_flag; - ignore_case_flag = m_settings.ignoreCase; - - m_globalSettings.ignoreEOLDiff = ignore_eol_diff; - ignore_eol_diff = m_settings.ignoreEOLDiff; - - m_globalSettings.ignoreSomeChanges = ignore_some_changes; - ignore_some_changes = m_settings.ignoreSomeChanges; - - m_globalSettings.lengthVaries = length_varies; - length_varies = m_settings.lengthVaries; - - m_globalSettings.heuristic = heuristic; - heuristic = m_settings.heuristic; - - m_globalSettings.recursive = recursive; - recursive = m_settings.recursive; -} - -/** - * @brief Resumes global options as they were before calling SwapToInternalOptions() - */ -void CDiffWrapper::SwapToGlobalSettings() -{ - // Resume values - output_style = m_globalSettings.outputStyle; - context = m_globalSettings.context; - always_text_flag = m_globalSettings.alwaysText; - horizon_lines = m_globalSettings.horizLines; - ignore_space_change_flag = m_globalSettings.ignoreSpaceChange; - ignore_all_space_flag = m_globalSettings.ignoreAllSpace; - ignore_blank_lines_flag = m_globalSettings.ignoreBlankLines; - ignore_case_flag = m_globalSettings.ignoreCase; - ignore_eol_diff = m_globalSettings.ignoreEOLDiff; - ignore_some_changes = m_globalSettings.ignoreSomeChanges; - length_varies = m_globalSettings.lengthVaries; - heuristic = m_globalSettings.heuristic; - recursive = m_globalSettings.recursive; -} - -/** * @brief Add diff to external diff-list */ void CDiffWrapper::AddDiffRange(UINT begin0, UINT end0, UINT begin1, UINT end1, BYTE op) @@ -997,7 +908,7 @@ CString switches; TCHAR tmpNum[5] = {0}; - switch (m_settings.outputStyle) + switch (m_options.m_outputStyle) { case OUTPUT_CONTEXT: switches = _T(" C"); @@ -1025,22 +936,22 @@ break; } - if (m_settings.context > 0) + if (m_options.m_contextLines > 0) { - _itot(m_settings.context, tmpNum, 10); + _itot(m_options.m_contextLines, tmpNum, 10); switches += tmpNum; } - if (m_settings.ignoreAllSpace > 0) + if (ignore_all_space_flag > 0) switches += _T("w"); - if (m_settings.ignoreBlankLines > 0) + if (ignore_blank_lines_flag > 0) switches += _T("B"); - if (m_settings.ignoreCase > 0) + if (ignore_case_flag > 0) switches += _T("i"); - if (m_settings.ignoreSpaceChange > 0) + if (ignore_space_change_flag > 0) switches += _T("b"); return switches; @@ -1057,22 +968,6 @@ } /** - * @brief Sets options for directory compare - */ -void CDiffWrapper::StartDirectoryDiff() -{ - SwapToInternalSettings(); -} - -/** - * @brief resumes options after directory compare - */ -void CDiffWrapper::EndDirectoryDiff() -{ - SwapToGlobalSettings(); -} - -/** * @brief Compare two files using diffutils. * * Compare two files (in DiffFileData param) using diffutils. Run diffutils Modified: trunk/Src/DiffWrapper.h =================================================================== --- trunk/Src/DiffWrapper.h 2007-02-01 18:51:40 UTC (rev 4090) +++ trunk/Src/DiffWrapper.h 2007-02-01 18:54:23 UTC (rev 4091) @@ -137,27 +137,6 @@ DIFFSTATUS() { memset(this, 0, sizeof(*this)); } // start out with all flags clear }; -/** - * @brief Internally used diffutils options. - */ -struct DIFFSETTINGS -{ - enum output_style outputStyle; /**< Output style (for patch files) */ - int context; /**< Number of context lines (for patch files) */ - int alwaysText; - int horizLines; - int ignoreSpaceChange; - int ignoreAllSpace; - int ignoreBlankLines; /**< Ignore blank lines (both sides) */ - int filterCommentsLines;/**< Ignore Multiline comments differences.*/ - int ignoreCase; /**< Ignore case differences? */ - int ignoreEOLDiff; /**< Ignore EOL style differences? */ - int ignoreSomeChanges; - int lengthVaries; - int heuristic; - int recursive; /**< Recurse to subfolders? (not used) */ -}; - class FilterCommentsManager; /** @@ -176,7 +155,7 @@ void SetCreatePatchFile(const CString &filename); void SetCreateDiffList(DiffList *diffList); void SetDiffList(DiffList *diffList); - void GetOptions(DIFFOPTIONS *options) const; + void GetOptions(DIFFOPTIONS *options); void SetOptions(const DIFFOPTIONS *options); void SetTextForAutomaticPrediff(const CString &text); void SetPrediffer(PrediffingInfo * prediffer =NULL); @@ -191,17 +170,11 @@ void GetDiffStatus(DIFFSTATUS *status); void AddDiffRange(UINT begin0, UINT end0, UINT begin1, UINT end1, BYTE op); void FixLastDiffRange(int leftBufferLines, int rightBufferLines, BOOL left); - void StartDirectoryDiff(); - void EndDirectoryDiff(); MovedLines * GetMovedLines() { return m_pMovedLines; } void SetCompareFiles(const CString &OriginalFile1, const CString &OriginalFile2); void SetFilterList(const CString &filterStr); protected: - void InternalGetOptions(DIFFOPTIONS *options) const; - void InternalSetOptions(const DIFFOPTIONS *options); - void SwapToInternalSettings(); - void SwapToGlobalSettings(); CString FormatSwitchString(); BOOL Diff2Files(struct change ** diffs, DiffFileData *diffData, int * bin_status, int * bin_file); @@ -210,8 +183,7 @@ bool RegExpFilter(int StartPos, int EndPos, int FileNo); private: - DIFFSETTINGS m_settings; /**< Compare settings for current compare */ - DIFFSETTINGS m_globalSettings; /**< Global compare settings */ + DiffutilsOptions m_options; DIFFSTATUS m_status; /**< Status of last compare */ FilterList * m_pFilterList; /**< List of linefilters. */ CString m_s1File; /**< Full path to first diff'ed file. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |