From fd34badffb23e45492c5ab8d34e8f50f6625c1ee Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 9 Dec 2023 00:05:09 +0900 Subject: [PATCH 01/19] WIP --- src/WinWebDiffLib/DOMUtils.hpp | 45 +++ src/WinWebDiffLib/Resource.h | 3 +- src/WinWebDiffLib/WebDiffWindow.hpp | 261 ++++-------------- src/WinWebDiffLib/WinWebDiffLib.js | Bin 0 -> 16908 bytes src/WinWebDiffLib/WinWebDiffLib.rc | 10 +- src/WinWebDiffLib/WinWebDiffLib.vcxproj | 1 + .../WinWebDiffLib.vcxproj.filters | 3 + 7 files changed, 121 insertions(+), 202 deletions(-) create mode 100644 src/WinWebDiffLib/WinWebDiffLib.js diff --git a/src/WinWebDiffLib/DOMUtils.hpp b/src/WinWebDiffLib/DOMUtils.hpp index bc312ca..ed42cc8 100644 --- a/src/WinWebDiffLib/DOMUtils.hpp +++ b/src/WinWebDiffLib/DOMUtils.hpp @@ -141,4 +141,49 @@ namespace domutils } return { nullptr, nullptr }; } + + struct NodePosInfo + { + int frameId; + int nodeId; + double left; + double top; + double width; + double height; + }; + + std::unordered_map makeNodeIdToNodePosInfoMap(WValue& nodeTree) + { + std::unordered_map map; + for (const auto& item : nodeTree.GetArray()) + { + const int frameId = item[L"frameId"].GetInt(); + const auto& nodeAry = item[L"layout"][L"nodeIndex"].GetArray(); + const auto& boundsAry = item[L"layout"][L"bounds"].GetArray(); + for (auto it1 = nodeAry.begin(), it2 = boundsAry.begin(); it1 != nodeAry.end(); ++it1, ++it2) + { + const int nodeId = it1->GetInt(); + NodePosInfo ni; + ni.nodeId = nodeId; + ni.frameId = frameId; + auto bounds = it2->GetArray(); + if (bounds.Size() == 4) + { + ni.left = bounds[0].GetDouble(); + ni.top = bounds[1].GetDouble(); + ni.width = bounds[2].GetDouble(); + ni.height = bounds[3].GetDouble(); + } + else + { + ni.left = 0; + ni.top = 0; + ni.width = 0; + ni.height = 0; + } + map.insert_or_assign(nodeId, ni); + } + } + return map; + } } diff --git a/src/WinWebDiffLib/Resource.h b/src/WinWebDiffLib/Resource.h index 2b584e5..b23a89a 100644 --- a/src/WinWebDiffLib/Resource.h +++ b/src/WinWebDiffLib/Resource.h @@ -8,6 +8,7 @@ #define ID_STOP 103 #define IDD_DIALOGBAR 103 #define IDC_DIFFMAP 112 +#define IDR_SCRIPT 130 #define IDC_MENU 1021 #define IDC_ZOOM 1022 #define IDC_WIDTH 1023 @@ -19,7 +20,7 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_RESOURCE_VALUE 131 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1003 #define _APS_NEXT_SYMED_VALUE 110 diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index fc1c463..3eca877 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -6,200 +6,6 @@ #include #include -const wchar_t* scriptOnLoad = -LR"( -(function() { - window.wdw = { "inClick": false/*, "inSubmit": false, "inKeydown": false*/ }; - function syncScroll(e) { - var el = document.querySelector(e.selector); - if (el && getWindowLocation() === e.window) { - var sleft = Math.round((el.scrollWidth - el.clientWidth) * e.left); - var stop = Math.round((el.scrollHeight - el.clientHeight) * e.top); - clearTimeout(wdw.timeout); - wdw.timeout = setTimeout(function() { - if (el.scroll) - { - window.removeEventListener('scroll', onScroll, true); - el.scroll(sleft, stop); - setTimeout(function() { window.addEventListener('scroll', onScroll, true); }, 10); - } - }, 100); - } - } - function syncClick(e) { - var el = document.querySelector(e.selector); - if (el && getWindowLocation() === e.window) { - wdw.inClick = true; - if (el.click) - el.click(); - wdw.inClick = false; - } - } - function syncInput(e) { - var el = document.querySelector(e.selector); - if (el && getWindowLocation() === e.window) { - el.value = e.value; - } - } -/* - function syncSubmit(e) { - var el = document.querySelector(e.selector); - if (el && getWindowLocation() === e.window) { - wdw.inSubmit = true; - if (el.submit) - el.submit(); - wdw.inSubmit = false; - } - } - function syncKeydown(e) { - var el = document.querySelector(e.selector); - if (el && getWindowLocation() === e.window) { - wdw.inKeydown = true; - var ev = new KeyboardEvent("keydown", e); - if (el.dispatchEvent) - el.dispatchEvent(ev); - wdw.inKeydown = false; - } - } -*/ - function getWindowLocation() { - let locationString = ''; - let currentWindow = window; - - while (currentWindow !== window.top) { - const frames = currentWindow.parent.frames; - let index = -1; - for (let i = 0; i < frames.length; i++) { - if (frames[i] === currentWindow) { - index = i; - break; - } - } - if (index !== -1) { - locationString = `[${index}]` + locationString; - } else { - locationString = 'top' + locationString; - } - currentWindow = currentWindow.parent; - } - - return locationString; - } - function getElementSelector(element) { - if (!(element instanceof Element)) { - return null; - } - - const selectorList = []; - while (element.parentNode) { - let nodeName = element.nodeName.toLowerCase(); - if (element.id) { - selectorList.unshift(`#${element.id}`); - break; - } else { - let sibCount = 0; - let sibIndex = 0; - const siblings = element.parentNode.childNodes; - for (let i = 0; i < siblings.length; i++) { - const sibling = siblings[i]; - if (sibling.nodeType === 1) { - if (sibling === element) { - sibIndex = sibCount; - } - if (sibling.nodeName.toLowerCase() === nodeName) { - sibCount++; - } - } - } - if (sibIndex > 0) { - nodeName += `:nth-of-type(${sibIndex + 1})`; - } - selectorList.unshift(nodeName); - element = element.parentNode; - } - } - return selectorList.join(' > '); - } - function onScroll(e) { - var el = ('scrollingElement' in e.target) ? e.target.scrollingElement : e.target; - var sel = getElementSelector(el); - var msg = { - "event": "scroll", - "window": getWindowLocation(), - "selector": sel, - "left": ((el.scrollWidth == el.clientWidth) ? 0 : (el.scrollLeft / (el.scrollWidth - el.clientWidth))), - "top": ((el.scrollHeight == el.clientHeight) ? 0 : (el.scrollTop / (el.scrollHeight - el.clientHeight))) - }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - } - function onClick(e) { - if (wdw.inClick) - return; - var sel = getElementSelector(e.target); - var msg = { "event": "click", "window": getWindowLocation(), "selector": sel }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - } - function onInput(e) { - var sel = getElementSelector(e.target); - var msg = { "event": "input", "window": getWindowLocation(), "selector": sel, "value": e.target.value }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - } - function onDblClick(e) { - var el = e.target; - var sel = getElementSelector(el); - var wwdid = ('wwdid' in el.dataset) ? el.dataset['wwdid'] : (('wwdid' in el.parentElement.dataset) ? el.parentElement.dataset['wwdid'] : -1); - var msg = { "event": "dblclick", "window": getWindowLocation(), "selector": sel, "wwdid": parseInt(wwdid) }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - } - function onMessage(arg) { - var data = arg.data; - switch (data.event) { - case "scroll": - syncScroll(data); - break; - case "click": - syncClick(data); - break; - case "input": - syncInput(data); - break; -/* - case "submit": - syncSubmit(data); - break; - case "keydown": - syncKeydown(data); - break; -*/ - } - } - window.addEventListener('click', onClick, true); - window.addEventListener('input', onInput, true); - window.addEventListener('dblclick', onDblClick, true); - window.addEventListener('scroll', onScroll, true); - window.chrome.webview.addEventListener('message', onMessage); -/* - var forms = document.querySelectorAll('form'); - forms.forEach(function(form) { - form.addEventListener('submit', function(e) { - if (wdw.inSubmit) - return; - var sel = getElementSelector(e.target); - var msg = { "event": "submit", "window": getWindowLocation(), "selector": sel }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - }); - }, true); - window.addEventListener('keydown', function(e) { - if (wdw.inKeydown) - return; - var sel = getElementSelector(e.target); - var msg = { "event": "keydown", "window": getWindowLocation(), "selector": sel, "altKey": e.altKey, "code": e.code, "ctrlKey": e.ctrlKey, "isComposing": e.isComposing, "key": e.key, "locale": e.locale, "location": e.location, "metaKey": e.metaKey, "repeat": e.repeat, "shiftKey": e.shiftKey }; - window.chrome.webview.postMessage(JSON.stringify(msg)); - }, true); -*/ -})(); -)"; - class CWebDiffWindow : public IWebDiffWindow { public: @@ -1009,7 +815,7 @@ class CWebDiffWindow : public IWebDiffWindow HRESULT addEventListener(IUnknown* sender, int pane, IWebDiffCallback* callback) { - return m_webWindow[pane].ExecuteScript(sender, scriptOnLoad, callback); + return m_webWindow[pane].ExecuteScript(sender, GetScriptOnLoad(), callback); } HRESULT syncEvent(int srcPane, const std::wstring& json) @@ -1077,10 +883,15 @@ class CWebDiffWindow : public IWebDiffWindow hr = setStyleSheetLoop(Highlighter::getStyleSheetText(m_currentDiffIndex, m_colorSettings).c_str(), Callback([this, callback2](const WebDiffCallbackResult& result) -> HRESULT { - HRESULT hr = result.errorCode; - SetCompareState(FAILED(hr) ? NOT_COMPARED : COMPARED); - if (callback2) - return callback2->Invoke({ hr, nullptr }); + HRESULT hr = makeNodeIdToNodePosInfoMapLoop( + Callback([this, callback2](const WebDiffCallbackResult& result)->HRESULT + { + HRESULT hr = result.errorCode; + SetCompareState(FAILED(hr) ? NOT_COMPARED : COMPARED); + if (callback2) + return callback2->Invoke({ hr, nullptr }); + return S_OK; + }).Get()); return S_OK; }).Get()); } @@ -1299,6 +1110,39 @@ class CWebDiffWindow : public IWebDiffWindow return hr; } + HRESULT makeNodeIdToNodePosInfoMapLoop(IWebDiffCallback* callback, int pane = 0) + { + static const wchar_t* method = L"DOMSnapshot.captureSnapshot"; + static const wchar_t* params = L"{ \"computedStyles\": [], \"includePaintOrder\": false, \"includeDOMRects\": true, \"includeBlendedBackgroundColors\": false, \"includeTextColorOpacities\": false }"; + ComPtr callback2(callback); + HRESULT hr = m_webWindow[pane].CallDevToolsProtocolMethod(method, params, + Callback([this, pane, callback2](const WebDiffCallbackResult& result) -> HRESULT + { + WDocument doc; + doc.Parse(result.returnObjectAsJson); + m_nodePosInfoMap[pane] = domutils::makeNodeIdToNodePosInfoMap(doc[L"documents"]); +#ifdef _DEBUG + WStringBuffer buffer; + WPrettyWriter writer(buffer); + doc.Accept(writer); + WriteToTextFile((L"c:\\tmp\\snapshot" + std::to_wstring(pane) + L".json"), + buffer.GetString()); +#endif + HRESULT hr = result.errorCode; + if (SUCCEEDED(hr)) + { + if (pane + 1 < m_nPanes) + hr = makeNodeIdToNodePosInfoMapLoop(callback2.Get(), pane + 1); + else if (callback2) + return callback2->Invoke({ hr, nullptr }); + } + if (FAILED(hr) && callback2) + return callback2->Invoke(result); + return S_OK; + }).Get()); + return hr; + } + HRESULT scrollIntoViewIfNeededLoop(int diffIndex, IWebDiffCallback* callback, int pane = 0) { ComPtr callback2(callback); @@ -1629,6 +1473,21 @@ class CWebDiffWindow : public IWebDiffWindow return fp != nullptr ? S_OK : (GetLastError() == 0 ? E_FAIL : HRESULT_FROM_WIN32(GetLastError())); } + static wchar_t* GetScriptOnLoad() + { + LPVOID pData = nullptr; + HMODULE hModule = GetModuleHandle(L"WinWebDiffLib.dll"); + HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(IDR_SCRIPT), RT_RCDATA); + if (hResource) { + HGLOBAL hLoadedResource = LoadResource(hModule, hResource); + if (hLoadedResource) { + pData = LockResource(hLoadedResource); + FreeResource(hLoadedResource); + } + } + return reinterpret_cast(pData); + } + int m_nPanes = 0; HWND m_hWnd = nullptr; HINSTANCE m_hInstance = nullptr; @@ -1647,11 +1506,13 @@ class CWebDiffWindow : public IWebDiffWindow std::vector> m_listeners; int m_currentDiffIndex = -1; std::vector m_diffInfos; + std::vector m_diffPosX; + std::vector m_diffPosY; + std::unordered_map m_nodePosInfoMap[3]; DiffOptions m_diffOptions{}; bool m_bShowDifferences = true; bool m_bShowWordDifferences = true; bool m_bSynchronizeEvents = true; - bool m_bCompareCompleted = false; unsigned m_eventSyncFlags = EVENT_SCROLL | EVENT_CLICK | EVENT_INPUT | EVENT_GOBACKFORWARD; CompareState m_compareState = NOT_COMPARED; IWebDiffWindow::ColorSettings m_colorSettings = { diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js new file mode 100644 index 0000000000000000000000000000000000000000..210c7a6943d2a0d45cbecaba8d2c6d8d1c4cc666 GIT binary patch literal 16908 zcmds9ZEst*73S9t*nd#Hp_bQLi}P`7HmqxgX2`l>4$u!lfXKESdvol}(&8GK|N6G) z;iF?7UXoW=j^eb1;8^A*56}A>dGo*jj>B>IcQ_A+VG&Nl1-^~LP8fxE;pgFJ_&o|& z7(Wk3cy<*g_&LJQC_IXDMqw*H{bM-8@5As<{QVm|ISx~d%)<=dZ^CbHVRiQ!Va|2j zeIKhYvBw!cl9RsFkkz87CysYukhC*eCIgwH10jcsOR1z;6=08j+Aj|`Y_)VDtzJdHcq}Ol_Z8nj z@~6;-lc+OwU*YEvi`-Xe-@|J;NfQH#uL z_Q~o2=F!WIqi3Ua69bbm{nK6R+Qs*d>3yy}DhF+HW{soCKB*oaxE!R`9p^{sLzYV^7iw%V|kf5?0I zTxO@5uShdI1pDr*B~}zOipCxXjl1fW1cN3C=dB5RQOh%v%*PS5PhbTWxj7&sWehmGW#rbo9fQ0*Gzqw zq|Qx_OOkE+)|T=U(D-KAzfeVy;-*>oPgBa00BJjmUPkh@sw$1&g}Xz$Pq}Bc>i7)a z@DO-er)ocXLe<;Catl5*$II5TyLO3B>d#n5P%FL176cz5u8>chM(@d*p$`@_b@nwp zJj-574WcIbtos-kPGj$EjwgiE-Yc)>C&+cv+MEa6#rQyO9f1qqFX6LxD`y{r)0dbr zcI$-C1I%WnJ_=vr$L~3bbJ_b~A5F79N0n8lnmCzf@KBy(^aY-gi~aPs;R<$6=V^sX z&g17G>ctd3spJHoCx2lp$`PZ*^Vf8tzdl~A)i2R$`z89>3HA+m^b(jc6YE=F(sP3q zv~YC{-c|FOK8VtSEy$QXC+imWt*GJPZHqi@Yx#Osknbfa`MqfWi|7f?2XijTx{Ma` zXOE-iTPJNl@;7zm$IHL%d8xOiJDv&r@>8@Cb*!iOeTY%kw4%eCv#eIfAuXWp&zPaZrm}R2yn7lstl}BY{oX)#30-k;Rfn|= zHNnVb(AI6jvQJ$PG@5j(O)23d4{A{T?^V1o+wZgLM5A%gR;@#2qKA3QU1_RQTOZA7 z_ty41@QszKKgaf5WsuXFEwyDb@{+y7Wt!)S((glU&U^l)Ax~zFGaqIVEXx zmkH=&m-7-@!J0t#Y!tz^!5`iSxq!5DJz2fd_eHlm9xBO%GPL}~@@3=sU9=; IV zWt!!*C0D|EKi%)b6Q$kJk7ErNa;B5za zLGJqd%6NXarv`Hr?}K&W<$gpynYuUp{!{(@$vT_#jf@+*LuDsGj8vPu1Eshp?hdbH zy<}QZ+)Goo`wW!40sonwbmg1NKr>7Jdh2FwW+#;FuJAm7W5%a?SIa}VzFq$yuD-rq z+mGEhz}{|j^y5e$*}gaAxwx6T59ax5`+Dxzo-4O*-83_wR&vHyak(Ydt(+3zN8H!V zA+H~Gj%o#EyUvOloyLcuaPrt<*q5~@Im5F$_GU^h)og1Xz5*9`io)K+9QCgHzVvds zk+%zdCg+c1&e_jTZ*N9-vbD|V7pXT*usu{w+bv4kHgDGG9#)#OxV8P(4CbwNr&8HM z4bF+PJyIuV_2_A`5@+a5+5eh#atE8`X!N4-bb2!HTtt)K?}%u%qVabzBIunE zo)q|VWu6m!(SuL7UnIC1?OT`b-)M!sU$Bqe?ah(g?-NUlix%<9{6cps(#f_~P#0A5 zFqZP2mNB@PS62CMPw`x_{MQ3!d)(}1b52PMFW%Vd=aVvqp4(YaWL`qhIh>A;tLefI zOM;Y^u+~j{Y6m9i;xn|bD77DlO?9KXy7y&l^;TtCC~ek?q&c~C=P`aP zkZqrUC*xb~o`7#wVbpfh?IA_0l&RB~b?c7$yWoan*De{+TJ3z}r z?&xDgdq*Gl?y_TwtLa2zYErT?7#Tyo!FlH`q*bgS?GsW+xZ literal 0 HcmV?d00001 diff --git a/src/WinWebDiffLib/WinWebDiffLib.rc b/src/WinWebDiffLib/WinWebDiffLib.rc index d6bbdf2..d8b08f5 100644 --- a/src/WinWebDiffLib/WinWebDiffLib.rc +++ b/src/WinWebDiffLib/WinWebDiffLib.rc @@ -105,7 +105,7 @@ BEGIN VALUE "FileDescription", "WinWebDiffLib" VALUE "FileVersion", STRFILEVER VALUE "InternalName", "WinWebDiffLib.dll" - VALUE "LegalCopyright", "Copyright (C) 2022 sdottaka@users.sourceforge.net" + VALUE "LegalCopyright", "Copyright (C) 2023 sdottaka@users.sourceforge.net" VALUE "OriginalFilename", "WinWebDiffLib.dll" VALUE "ProductName", "WinWebDiffLib" VALUE "ProductVersion", STRPRODUCTVER @@ -135,6 +135,14 @@ BEGIN PUSHBUTTON "Menu",IDC_MENU,6,0,61,12 END + +///////////////////////////////////////////////////////////////////////////// +// +// SCRIPT +// + +IDR_SCRIPT RCDATA "WinWebDiffLib.js" + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/WinWebDiffLib/WinWebDiffLib.vcxproj b/src/WinWebDiffLib/WinWebDiffLib.vcxproj index 2b9f5fd..9be8470 100644 --- a/src/WinWebDiffLib/WinWebDiffLib.vcxproj +++ b/src/WinWebDiffLib/WinWebDiffLib.vcxproj @@ -288,6 +288,7 @@ + diff --git a/src/WinWebDiffLib/WinWebDiffLib.vcxproj.filters b/src/WinWebDiffLib/WinWebDiffLib.vcxproj.filters index 4317ad8..8fcc176 100644 --- a/src/WinWebDiffLib/WinWebDiffLib.vcxproj.filters +++ b/src/WinWebDiffLib/WinWebDiffLib.vcxproj.filters @@ -59,6 +59,9 @@ Source Files + + Header Files + From 030ff9ea83d2daad508c85e45920db9ff34f6a86 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 9 Dec 2023 09:52:49 +0900 Subject: [PATCH 02/19] WIP --- src/WinWebDiffLib/DOMUtils.hpp | 45 -------------------------- src/WinWebDiffLib/WebDiffWindow.hpp | 49 +++-------------------------- 2 files changed, 4 insertions(+), 90 deletions(-) diff --git a/src/WinWebDiffLib/DOMUtils.hpp b/src/WinWebDiffLib/DOMUtils.hpp index ed42cc8..bc312ca 100644 --- a/src/WinWebDiffLib/DOMUtils.hpp +++ b/src/WinWebDiffLib/DOMUtils.hpp @@ -141,49 +141,4 @@ namespace domutils } return { nullptr, nullptr }; } - - struct NodePosInfo - { - int frameId; - int nodeId; - double left; - double top; - double width; - double height; - }; - - std::unordered_map makeNodeIdToNodePosInfoMap(WValue& nodeTree) - { - std::unordered_map map; - for (const auto& item : nodeTree.GetArray()) - { - const int frameId = item[L"frameId"].GetInt(); - const auto& nodeAry = item[L"layout"][L"nodeIndex"].GetArray(); - const auto& boundsAry = item[L"layout"][L"bounds"].GetArray(); - for (auto it1 = nodeAry.begin(), it2 = boundsAry.begin(); it1 != nodeAry.end(); ++it1, ++it2) - { - const int nodeId = it1->GetInt(); - NodePosInfo ni; - ni.nodeId = nodeId; - ni.frameId = frameId; - auto bounds = it2->GetArray(); - if (bounds.Size() == 4) - { - ni.left = bounds[0].GetDouble(); - ni.top = bounds[1].GetDouble(); - ni.width = bounds[2].GetDouble(); - ni.height = bounds[3].GetDouble(); - } - else - { - ni.left = 0; - ni.top = 0; - ni.width = 0; - ni.height = 0; - } - map.insert_or_assign(nodeId, ni); - } - } - return map; - } } diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index 3eca877..43c8c31 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -883,15 +883,10 @@ class CWebDiffWindow : public IWebDiffWindow hr = setStyleSheetLoop(Highlighter::getStyleSheetText(m_currentDiffIndex, m_colorSettings).c_str(), Callback([this, callback2](const WebDiffCallbackResult& result) -> HRESULT { - HRESULT hr = makeNodeIdToNodePosInfoMapLoop( - Callback([this, callback2](const WebDiffCallbackResult& result)->HRESULT - { - HRESULT hr = result.errorCode; - SetCompareState(FAILED(hr) ? NOT_COMPARED : COMPARED); - if (callback2) - return callback2->Invoke({ hr, nullptr }); - return S_OK; - }).Get()); + HRESULT hr = result.errorCode; + SetCompareState(FAILED(hr) ? NOT_COMPARED : COMPARED); + if (callback2) + return callback2->Invoke({ hr, nullptr }); return S_OK; }).Get()); } @@ -1110,39 +1105,6 @@ class CWebDiffWindow : public IWebDiffWindow return hr; } - HRESULT makeNodeIdToNodePosInfoMapLoop(IWebDiffCallback* callback, int pane = 0) - { - static const wchar_t* method = L"DOMSnapshot.captureSnapshot"; - static const wchar_t* params = L"{ \"computedStyles\": [], \"includePaintOrder\": false, \"includeDOMRects\": true, \"includeBlendedBackgroundColors\": false, \"includeTextColorOpacities\": false }"; - ComPtr callback2(callback); - HRESULT hr = m_webWindow[pane].CallDevToolsProtocolMethod(method, params, - Callback([this, pane, callback2](const WebDiffCallbackResult& result) -> HRESULT - { - WDocument doc; - doc.Parse(result.returnObjectAsJson); - m_nodePosInfoMap[pane] = domutils::makeNodeIdToNodePosInfoMap(doc[L"documents"]); -#ifdef _DEBUG - WStringBuffer buffer; - WPrettyWriter writer(buffer); - doc.Accept(writer); - WriteToTextFile((L"c:\\tmp\\snapshot" + std::to_wstring(pane) + L".json"), - buffer.GetString()); -#endif - HRESULT hr = result.errorCode; - if (SUCCEEDED(hr)) - { - if (pane + 1 < m_nPanes) - hr = makeNodeIdToNodePosInfoMapLoop(callback2.Get(), pane + 1); - else if (callback2) - return callback2->Invoke({ hr, nullptr }); - } - if (FAILED(hr) && callback2) - return callback2->Invoke(result); - return S_OK; - }).Get()); - return hr; - } - HRESULT scrollIntoViewIfNeededLoop(int diffIndex, IWebDiffCallback* callback, int pane = 0) { ComPtr callback2(callback); @@ -1506,9 +1468,6 @@ class CWebDiffWindow : public IWebDiffWindow std::vector> m_listeners; int m_currentDiffIndex = -1; std::vector m_diffInfos; - std::vector m_diffPosX; - std::vector m_diffPosY; - std::unordered_map m_nodePosInfoMap[3]; DiffOptions m_diffOptions{}; bool m_bShowDifferences = true; bool m_bShowWordDifferences = true; From 1ab5fb845f4aa2f641ac1ac7418ddfe8d19ed16c Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 9 Dec 2023 09:53:14 +0900 Subject: [PATCH 03/19] WIP --- src/WinWebDiffLib/WebDiffWindow.hpp | 2 +- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16908 -> 16748 bytes .../WinWebDiffLib.vcxproj.filters | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index 43c8c31..a47549a 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -1447,7 +1447,7 @@ class CWebDiffWindow : public IWebDiffWindow FreeResource(hLoadedResource); } } - return reinterpret_cast(pData); + return reinterpret_cast(pData) + 1/*bom*/; } int m_nPanes = 0; diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 210c7a6943d2a0d45cbecaba8d2c6d8d1c4cc666..33ed0ff8a9c0c285d8fce5adabb815de78637a33 100644 GIT binary patch delta 195 zcmeBaVSLlXxWR^dvJ8{J~7Kp#}&Q7>Lzb%#aK;GaqPX4ukq+LkZEz w349!rl(QyJQSource Files - Header Files + Resource Files From 2974bc31d01ebf9f8722ac1a97190d2fd52a68ec Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sun, 10 Dec 2023 07:12:18 +0900 Subject: [PATCH 04/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16748 -> 16768 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 33ed0ff8a9c0c285d8fce5adabb815de78637a33..8db579dd2134b87a3b1e9bb3e96c55acfd11f5db 100644 GIT binary patch delta 723 zcmah{&ubG=5PsWich}8kjY*oWHORK68YApz}F+*@GlOjq}{xBScUOpe*_yvZM8Fu=wA zTy=7f%#s_##i)E_l`nKtd=$DVU~)F5f-S_vrT<;}E}GrCsbK#3U+l4LOO{J zgM&k{dYHwvbO}|3!+BZ2Tweq`>ARRX5X0rn1m<-Co0(_yZ5+b6gwNMT&h6phD2s+H zV~vyX=@^Gv*4h(qWu4zV+asZx8$$;l=f-{fmMfuRP=Edumh&2x4UP6GqGc$wPZ6rF zpsFWOQDw~OlfGtGKk9SGpq%PAj1JH6_lZh|=qLDK4Td__pT$jE<$y{afGLllog7+e zhLIe8jU~nar$z8(Sb;@{*U&EdO>GMCgDy>0rf2`Ox3rkAnkmW1m@$l*CCr;s*fA}L zg(~XBBxVaTo)@!tSy)8P61@|}0S4=q!n?FDhp2cb^wZ@%wW1L17~awe8uoSXiM<{C E3H|laeEHT&X&z2K z#Cbf#u%5q+E13YQQHK2<{^``T>tXmRFlf4c#Ao$OK9Ay_5Wun?#IIBptz$uqCTHB9 zhLz+Qs0zboGQ;s3#{e8Lj%G3jRhID1^=(E&sHaxBXHn4bGj-nMPlp+%(l0O2o4592~uY{HCte>yoWA@w;j~Nr4VAT?E)o3TR3;|n4f=9Fro#P+B z9x>bcMkLB(-irLmz2iFOv_H}v|8BZBbzh;!rdl0aJ9*XWT0GlU!Sa@f-NFP%&7R}9 zWS2NTv#Vm9R7eHaizbaDUCQBfan0*Bn#FPI5jjC_kXz&$afprIRt4`%{FvA+jkq7~ egLM)QZ4G)^b9W|SvU~?WPDt2O!;R17H}XG?`r32= From cb41b481f04f01425ddd2176291f45d597e2967b Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sun, 10 Dec 2023 20:25:09 +0900 Subject: [PATCH 05/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16768 -> 16638 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 8db579dd2134b87a3b1e9bb3e96c55acfd11f5db..5585ed9e216225f78f5cfbbc167f40c517ee6ccd 100644 GIT binary patch delta 44 zcmZo@X8hO4xS>yLvygTbBdaZg0z=YdK_= Date: Mon, 11 Dec 2023 23:42:07 +0900 Subject: [PATCH 06/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16638 -> 16924 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 5585ed9e216225f78f5cfbbc167f40c517ee6ccd..a520b6ecdebc796241b5377c8b574c81396b2f07 100644 GIT binary patch delta 296 zcmey@$T+8kal<|iW(5Y_$^9Iv%#{rJlP~f~PZnTz*(}3p#W;Bpo806Qt_~~;yf!Cr z$1!4&;F-KbT5NIw8_VW@JXcT@Y`(}hQDU-#HIHN^Lo$N`gDnsj16f53Aq@Ep1wfwm zoe$2UahXp4x||>f#U1c)i-H8VTPKd#-IjN z4KdXQY;MwIK_=1@FV?*arn~jjRds+mlz@8jfut2&w=R%{aRh9ZU#hJ1zs z1_cH+AXEUFiY#WsU<(vWnk>j9J=sc6ZE~FM3T`A7lR5RKqwp8&-9_Oy>#J|Rpzk9D E02k6U$N&HU From e99936bda9144af5457fbf99ed3acc2166a76775 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Tue, 12 Dec 2023 07:17:05 +0900 Subject: [PATCH 07/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16924 -> 16854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index a520b6ecdebc796241b5377c8b574c81396b2f07..12ce2c9e1244c4f47143bedb69f8b7cd86e87b84 100644 GIT binary patch delta 193 zcmbQ!!g#Hjae@e^0)qyFCW8V)^<;Yo@r_3J7#S5N^E2g7<}=}#+`%NXc^Q)$@8lRY zfyo8pJd=O%zeCcX=$O7aOfXM;vx24z2Uwfr Date: Tue, 12 Dec 2023 09:15:42 +0900 Subject: [PATCH 08/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 16854 -> 17990 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 12ce2c9e1244c4f47143bedb69f8b7cd86e87b84..4ff21cd30888c18671fbcc0c027a1178beba12a9 100644 GIT binary patch delta 453 zcmccC%y_JaaYD;vDK!!4FosNqVjxap$YDrja0QdOKvo_@$z)w6$;mY;e3K27)R>DH zk|)=)_)fkf&H-kB*OX^Wo-C~;3nXo|6eW`x^cXUL`Z5{PfpiIj0)s6ODliyK-Y6|S zIZD}LvH~l|WCJF)$#U862+rnXU$prgM};i_WSkF^ From d0d1a4afa3a233b585ead610038bae9ff3b434df Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Tue, 12 Dec 2023 23:15:33 +0900 Subject: [PATCH 09/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 17990 -> 21710 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 4ff21cd30888c18671fbcc0c027a1178beba12a9..74f21192a2310d201157dc34bb2beb1fb4fc156e 100644 GIT binary patch delta 2154 zcmb_dOHUI~6uwMbJHT}8q=mMEeV{z+C={uHMe&&$!5DQ1H4s4{7O-H98WUZrF~;~M zE>(<)abwVKeQq>S<1bJnZd@1%3x9y;-f1g#S{}wsX6DYl=bZ1H@80jso9iVXAC=6$ zk`9cpVRnWcWhdAan`BA44%2&@jnV8FjV9QBu`W$ip0BF|~^93=k}Y#1|P4|dp;Hu4e?H`6MQIZUf(2y=?{ zv1XPagb?eZXANCJwv%qM!k{-$yPRhu*>>WG--pMYGVYaHv0(GUx#k!KbQRTM8D;jR z@mu~GpL?3|pV__mWH<0ROP8H84wWjHm*WU-I+DpVim!ev8g&1yvO19}rSAy|a$2aQ zI=VP1oU90*SUk9)Zp0m{8~*ZskBMlqCHhca9>A}9Cq8Hd>yRt*;~CNB^e}cShegB} z%3gbhVuT#7-1zz0s-h@wl~&wqR`E_#1qzR9&Y7cJadMO|xu|&v6$R_SclDBOJ9Dry zyw*G%!Ieem5{KkZ6-NAi#5DgZF*>xW3{!r5l-(lJ&B_pE+m3e4kD%*9v4}-^+2`uT z5xpAD2G!C>yYbWQ32^Z=3*i*1HGx#DHoUwrb3(+fN*|ZrC5lht;X*n|LTV8RQ$kXw zGhgTO#h95l=fU@mOOOk2`CLSksHTn(FV-c{;@DtmWZN+(`SKEt{FSKjWlq$XHzykT z|B3qWKzFW78eOx4fHLsD+!`xXH(Vs#Wwkb zBrqAPPrs6SO7PWYgouBiC!OF^wpuM~6&5S?EP=aG9|mM=h_CQ1S<=5EYnAh-_zBEJU6^Ry zjd;5gPg`p&T8gY0#x*6P;=M1FJ|6CtFyvjQ?IJlO>7P}T zDJ_xytoKUz7O5nKE9ueZFVbQP4w@S-Kgyo{oh9LyGLP_mkMoXC|@ z6iiE7`z0*2sRenOvsV?If8N%L)7@%18SSy)e$-n&LG5FZ4(u?S#*FR?<;j5Rr9(jf R?Z2!{Vo60@>31C$mEWR7&eH$@ delta 915 zcma)5OKTHR6h7%ZGfvZVv@_D$%w#f?78-*IShOV2N(7NY6+$VtN){>l?%GEt_SceZzfOM^q5}KCS9Y4vWlPbx`5aVOtdr|R>?*u&^d%N2vKGbSE+z6zJq63n@fm4p*j^= zzKrKeIE1_~l)R$|^54qe Date: Wed, 13 Dec 2023 07:45:09 +0900 Subject: [PATCH 10/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 21710 -> 22406 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 74f21192a2310d201157dc34bb2beb1fb4fc156e..0425631e1d4a5bab9c4fa3e078472eb91bfdef08 100644 GIT binary patch delta 747 zcmX@NlCf<)A|ForPsH8Il-s7&0017}6OO80>*K70A~E@}VmDQB_z? z?)6ii%%{aSd4m$iW<4f7_Q?xmcpQruDuG&Ufmnkf18iIg(2z=oWT1#H5F0RP0!e)g zc_Wzop!l0AR9No=gwyYSrtj4RbY?9Jcemq9B&np2RSBJ@CZ!)XT&#o7Z2a$1io8z zaKS$=i^(}WHj~%!$G}{&IZnWZaq=V~vB~EI*KM98^g)@olEIKciNOjOK|t2zKnG!d zB_PWPE@lK5ONNUjgTyAwI4VsJauAwaV9GK%gV!Z delta 372 zcmZo$&v Date: Wed, 13 Dec 2023 09:09:27 +0900 Subject: [PATCH 11/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 22406 -> 22474 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 0425631e1d4a5bab9c4fa3e078472eb91bfdef08..53a68d7717376a1af6bb9093ebc68eff1c0f4e64 100644 GIT binary patch delta 38 ucmZo$&v Date: Wed, 13 Dec 2023 21:53:02 +0900 Subject: [PATCH 12/19] WIP --- src/WinWebDiffLib/WebDiffWindow.hpp | 5 +++++ src/WinWebDiffLib/WinWebDiffLib.js | Bin 22474 -> 22636 bytes 2 files changed, 5 insertions(+) diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index a47549a..0cc5799 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -165,6 +165,11 @@ class CWebDiffWindow : public IWebDiffWindow else if (event == WebDiffEvent::WebMessageReceived || event == WebDiffEvent::FrameWebMessageReceived) { std::wstring msg = m_webWindow[i].GetWebMessage(); +#ifdef _DEBUG + wchar_t buf[4096]; + wsprintfW(buf, L"WebMessageReceived: %s\n", msg.c_str()); + OutputDebugString(buf); +#endif WDocument doc; doc.Parse(msg.c_str()); std::wstring event = doc.HasMember(L"event") ? doc[L"event"].GetString() : L""; diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index 53a68d7717376a1af6bb9093ebc68eff1c0f4e64..e4b7ace38d3b2ff81a73bf94d17ed2b526f76295 100644 GIT binary patch delta 156 zcmX@Lp7G5F#tnKZll%C1CjWC~n=GZw#j3zy%b+m%zp`k!9zzjBDnkK74nrbCGLYp6 zWaThuFz5quG(!x79)mK24v+@1V}aO;!461j1F;Cm}fi delta 37 tcmaE}f$`LO#tnKZldoxNP5!6CF-b*)xt1YevY?&l Date: Thu, 14 Dec 2023 08:11:27 +0900 Subject: [PATCH 13/19] WIP --- src/WinWebDiffLib/DiffHighlighter.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WinWebDiffLib/DiffHighlighter.hpp b/src/WinWebDiffLib/DiffHighlighter.hpp index 97d69cb..886b92b 100644 --- a/src/WinWebDiffLib/DiffHighlighter.hpp +++ b/src/WinWebDiffLib/DiffHighlighter.hpp @@ -1148,10 +1148,10 @@ class Highlighter { wchar_t styleValue[256]; if (color == 0xFFFFFFFF) - swprintf_s(styleValue, L"background-color: #%02x%02x%02x;", + swprintf_s(styleValue, L"background-color: #%02x%02x%02x !important;", GetRValue(backcolor), GetGValue(backcolor), GetBValue(backcolor)); else - swprintf_s(styleValue, L"color: #%02x%02x%02x; background-color: #%02x%02x%02x;", + swprintf_s(styleValue, L"color: #%02x%02x%02x; background-color: #%02x%02x%02x !important;", GetRValue(color), GetGValue(color), GetBValue(color), GetRValue(backcolor), GetGValue(backcolor), GetBValue(backcolor)); return styleValue; From 475bfb3ddb6f9ebd7a0f97f33c25d3480dfd6f60 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Thu, 14 Dec 2023 08:47:20 +0900 Subject: [PATCH 14/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 22636 -> 22642 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index e4b7ace38d3b2ff81a73bf94d17ed2b526f76295..d8cc012df3694c208d9e8ca5aea7e6635dcd5f50 100644 GIT binary patch delta 36 scmaE}f$`G@#tkldjJlKE^>o=480;7n7%V1#^bwwXL4{>=m);{y0O|w`X8-^I delta 26 icmeygf$_}-#tkldlb`5{O^(o$njD~Gw|R%&E=>TTuL~If From 920fa9bfb8d5e3e9a2826492b90dce146d6cb020 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Thu, 14 Dec 2023 08:50:13 +0900 Subject: [PATCH 15/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 22642 -> 22642 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index d8cc012df3694c208d9e8ca5aea7e6635dcd5f50..a17b331224630d92c325b40074d7b36faec03b59 100644 GIT binary patch delta 20 ccmeygf$`G@#tjvEjE0l_b?i6q(A%X60AcG0m;e9( delta 20 ccmeygf$`G@#tjvEj24sqb?i6q(A%X60Aeu+p8x;= From ac23ae0563a804488bb57c20357c0c7801e6abc3 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Fri, 15 Dec 2023 07:54:25 +0900 Subject: [PATCH 16/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 22642 -> 23076 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index a17b331224630d92c325b40074d7b36faec03b59..ec12678cc8e1a0851415127846aef96b3203f83b 100644 GIT binary patch delta 469 zcmeygfpN(e#tlvE@i`3n49N_M3^@#bKr)vhl|g|)k--)S6&RElG8jsLVmUyT0)rY5 zDgfnk81#S`pROdJYzjjqP?zT9h3t`&tCYAV>v8gJR^W(GV>FrED6T%aOFLxp26MK_ z548Cb^BKy3#uhQ8fsHK(S^}~j)pRQt{mx_QY za)3}B=mlpXAZ44^7%$<%B0hPIvB72w`!`Ym*E%Kk From fa324e61a62e52c71d13ac83f2f820cff0c940be Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 16 Dec 2023 11:31:16 +0900 Subject: [PATCH 17/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.js | Bin 23076 -> 23722 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index ec12678cc8e1a0851415127846aef96b3203f83b..aaa027d382614412ce87155f3b49f6b93690dfdd 100644 GIT binary patch delta 374 zcmZ3og>ltR#tm{}lNFfRHqVjO(cCO2mcuf6pNtrPE<-UxI)ffV215};Dnr_2M>grn z1u`bu2@KINF$P-(bp{oNY6dj547EV>$Z9`5hx4doj>-1BTei6SedwuTkP+2Ki~BwD9BuI$V>>WR6U}CoQwNKw6Dy a^9eT&PF{%3u#j6AD9H|GZ$9rI$^`(Jwos-3 delta 50 zcmV-20L}lZxdEiK0k9qxvrs>51e5wl%Cp`^LIRT@0|t|dMk2FD778h|AV~-blb% Date: Sun, 17 Dec 2023 10:18:48 +0900 Subject: [PATCH 18/19] WIP --- src/WinWebDiffLib/WebDiffWindow.hpp | 2 +- src/WinWebDiffLib/WinWebDiffLib.js | Bin 23722 -> 23878 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WinWebDiffLib/WebDiffWindow.hpp b/src/WinWebDiffLib/WebDiffWindow.hpp index 0cc5799..e70ef5b 100644 --- a/src/WinWebDiffLib/WebDiffWindow.hpp +++ b/src/WinWebDiffLib/WebDiffWindow.hpp @@ -167,7 +167,7 @@ class CWebDiffWindow : public IWebDiffWindow std::wstring msg = m_webWindow[i].GetWebMessage(); #ifdef _DEBUG wchar_t buf[4096]; - wsprintfW(buf, L"WebMessageReceived: %s\n", msg.c_str()); + wsprintfW(buf, L"WebMessageReceived(pane:%d): %s\n", ev.pane, msg.c_str()); OutputDebugString(buf); #endif WDocument doc; diff --git a/src/WinWebDiffLib/WinWebDiffLib.js b/src/WinWebDiffLib/WinWebDiffLib.js index aaa027d382614412ce87155f3b49f6b93690dfdd..303b70e5a6233d730fb40c3ad9bdda3f81c99700 100644 GIT binary patch delta 365 zcmZ3rlkwOt#tCY&nG9(R3Je+yBG`9PK)5SIhlnv*9=NlsP>O-sIr2UY+mXR%slx3ACG<_LlHwI&?H+R&SfZONC%pd0TfFGny&}s7ck@i zZ72cSq|Ttvpg#Gdfaqi{c@0*uzR8aA#;IitAhrTfZ7NVL#3Ut#Xt*gVK(o~ulz=kY zKn$@DWHQLyWS|}mAgu|sD+}lckYAuS0mVQ%lz@6;8I&eB$|+A?;^M$qJh@&)a&mw* z+hhd=w#fplER!o-h1l)D?l+uls3t@23M8I4H6ua_gTwKz96A8`JE8o;&Mh75)xhE#?$23rPo1{H>ChFpeXhI9r!xOgp4Ja)36ocQDkj2x_rK(#rO6&=+l z9|&ccT;OVxi)@ApPE+*2wiGbrFeEZ01I^H2&}WDPl6nkU44MovK%NHBEpb3PmO&dR zq5@>;Feor60a->sQj-DZ4(Z7PN*t2|SXm}ta}{E@1=^^Hy%c? iuj}30p|tpB1&=vQV9tIoRS>=Txz}PgFrzncCpQ3t{7Mo4 From 01c8795a96a91a9d844e26db8252a86be5289f90 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sun, 17 Dec 2023 10:39:36 +0900 Subject: [PATCH 19/19] WIP --- src/WinWebDiffLib/WinWebDiffLib.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WinWebDiffLib/WinWebDiffLib.rc b/src/WinWebDiffLib/WinWebDiffLib.rc index d8b08f5..618629f 100644 --- a/src/WinWebDiffLib/WinWebDiffLib.rc +++ b/src/WinWebDiffLib/WinWebDiffLib.rc @@ -105,7 +105,7 @@ BEGIN VALUE "FileDescription", "WinWebDiffLib" VALUE "FileVersion", STRFILEVER VALUE "InternalName", "WinWebDiffLib.dll" - VALUE "LegalCopyright", "Copyright (C) 2023 sdottaka@users.sourceforge.net" + VALUE "LegalCopyright", "Copyright (C) 2022-2023 sdottaka@users.sourceforge.net" VALUE "OriginalFilename", "WinWebDiffLib.dll" VALUE "ProductName", "WinWebDiffLib" VALUE "ProductVersion", STRPRODUCTVER