00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __WEIDIFFLIB_H__
00021 #define __WEIDIFFLIB_H__
00022
00023 #include <string>
00024 #include <vector>
00025 #include <set>
00026 #include <map>
00027 #include <boost/variant.hpp>
00028 #include <boost/algorithm/string/predicate.hpp>
00029
00030 using namespace std;
00031 using namespace boost;
00032
00036
00037 enum weCmpState{
00038 weCmpNonComparable = -99,
00039 weCmpDeleted = -2,
00040 weCmpLess = -1,
00041 weCmpEqual = 0,
00042 weCmpGreather = 1,
00043 weCmpInserted = 2
00044 } ;
00045
00046 class iweEntity;
00047 typedef variant<string, iweEntity*> WeCmpEntity;
00048
00049 struct WeCmpBlock
00050 {
00051 weCmpState state;
00052 WeCmpEntity entity;
00053 };
00054
00055 typedef vector<WeCmpBlock*> WeCmpResults;
00056
00057 enum weCmpMode {
00058 CmpMask = 0xFFFFFFFF
00059 };
00060
00061 static const weCmpMode weCmpNothing = (weCmpMode)0x0000;
00062 static const weCmpMode weCmpInnerText = (weCmpMode)0x0001;
00063 static const weCmpMode weCmpCaseInsens = (weCmpMode)0x0002;
00064 static const weCmpMode weCmpCollapseSpace = (weCmpMode)0x0004;
00065 static const weCmpMode weCmpAttributes = (weCmpMode)0x0008;
00066 static const weCmpMode weCmpAttrValues = (weCmpMode)0x0010;
00067 static const weCmpMode weCmpAttrOrder = (weCmpMode)0x0020;
00068 static const weCmpMode weCmpChildren = (weCmpMode)0x0040;
00069 static const weCmpMode weCmpChildrenTree = (weCmpMode)0x0080;
00070
00071 static const weCmpMode weCmpDefault = (weCmpMode)0xffff;
00072
00081 struct WeDiffLibWord
00082 {
00083 #ifndef __DOXYGEN__
00084 string word;
00085 weCmpMode mode;
00086 bool operator==(WeDiffLibWord& cpy)
00087 {
00088 if (mode & weCmpCaseInsens)
00089 {
00090 return iequals(word, cpy.word);
00091 }
00092 return equals(word, cpy.word);
00093 };
00094 #endif // __DOXYGEN__
00095 };
00096
00097 typedef vector<WeDiffLibWord> WeDiffLibWordList;
00098
00099 extern WeDiffLibWordList* WeDiffLibTextToList(string txt, weCmpMode mode);
00100 extern WeCmpResults* WeTextDiff(string txt1, string txt2, weCmpMode mode = weCmpDefault);
00101
00102 #endif //__WEIDIFFLIB_H__