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.
|