--- /dev/null
+<scriptlet>\r
+<implements type="Automation" id="dispatcher">\r
+ <property name="PluginEvent">\r
+ <get/>\r
+ </property>\r
+ <property name="PluginDescription">\r
+ <get/>\r
+ </property>\r
+ <property name="PluginFileFilters">\r
+ <get/>\r
+ </property>\r
+ <property name="PluginIsAutomatic">\r
+ <get/>\r
+ </property>\r
+ <method name="PrediffBufferW"/>\r
+ <method name="ShowSettingsDialog"/>\r
+</implements>\r
+\r
+<script language="VBS">\r
+\r
+'/////////////////////////////////////////////////////////////////////////////\r
+' This is a plugin for WinMerge.\r
+' It will display the text content of MS Excel files.\r
+' Copyright (C) 2018 Takashi Sawanaka\r
+'\r
+' This program is free software; you can redistribute it and/or modify\r
+' it under the terms of the GNU General Public License as published by\r
+' the Free Software Foundation; either version 2 of the License, or\r
+' (at your option) any later version.\r
+'\r
+' This program is distributed in the hope that it will be useful,\r
+' but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+' GNU General Public License for more details.\r
+'\r
+' You should have received a copy of the GNU General Public License\r
+' along with this program; if not, write to the Free Software\r
+' Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
+'\r
+\r
+Option Explicit\r
+\r
+Const RegKeyPath = "HKCU\Software\Thingamahoochie\WinMerge\Plugins\PrediffLineFilter.sct\"\r
+Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")\r
+Dim wsh: Set wsh = CreateObject("WScript.Shell")\r
+\r
+Function regRead(Key, DefaultValue)\r
+ regRead = DefaultValue\r
+ On Error Resume Next\r
+ regRead = wsh.RegRead(Key)\r
+End Function\r
+\r
+Function get_PluginEvent()\r
+ get_PluginEvent = "BUFFER_PREDIFF"\r
+End Function\r
+\r
+Function get_PluginDescription()\r
+ get_PluginDescription = "Prediff Line Filter"\r
+End Function\r
+\r
+Function get_PluginFileFilters()\r
+ get_PluginFileFilters = "\.nomatch(\..*)?$"\r
+End Function\r
+\r
+Function get_PluginIsAutomatic()\r
+ get_PluginIsAutomatic = True\r
+End Function\r
+\r
+Function SafeUBound(ary)\r
+ On Error Resume Next\r
+ SafeUBound = -1\r
+ SafeUBound = UBound(ary)\r
+End Function\r
+\r
+Function PrediffBufferW(pText, pSize, pbChanged)\r
+ On Error Resume Next\r
+ Dim re, pattern, replaceText\r
+ Dim count, i, j\r
+ Dim lines\r
+ Set re = New RegExp\r
+ If pText = "" Then\r
+ pbChanged = False\r
+ PrediffBufferW = True\r
+ Exit Function\r
+ End If\r
+ lines = Split(pText, vbLf)\r
+ count = regRead(RegKeyPath & "Count", 0)\r
+ For i = 1 To count\r
+ If regRead(RegKeyPath & "Enabled" & i, True) Then\r
+ If regRead(RegKeyPath & "UseRegExp" & i, True) Then\r
+ re.Global = True\r
+ re.Pattern = regRead(RegKeyPath & "Pattern" & i, "")\r
+ replaceText = regRead(RegKeyPath & "ReplaceText" & i, "")\r
+ For j = 0 To SafeUBound(lines)\r
+ lines(j) = re.Replace(lines(j), replaceText)\r
+ Next\r
+ Else\r
+ pattern = regRead(RegKeyPath & "Pattern" & i, "")\r
+ replaceText = regRead(RegKeyPath & "ReplaceText" & i, "")\r
+ For j = 0 To SafeUBound(lines)\r
+ lines(j) = Replace(lines(j), pattern, replaceText)\r
+ Next\r
+ End If\r
+ End If\r
+ Next\r
+ pText = Join(lines, vbLf)\r
+ pSize = Len(pText)\r
+ pbChanged = True\r
+ PrediffBufferW = True\r
+End Function\r
+\r
+Function ShowSettingsDialog()\r
+ Dim tname: tname = fso.BuildPath(fso.GetSpecialFolder(2), fso.GetTempName() & ".hta")\r
+ Dim tfile: Set tfile = fso.CreateTextFile(tname)\r
+ tfile.Write getResource("dialog1")\r
+ tfile.Close\r
+ Run wsh, "mshta.exe """ & tname & """"\r
+ fso.DeleteFile tname \r
+End Function\r
+\r
+Sub Run(sh, cmd)\r
+ sh.Run cmd, 1, True\r
+End Sub\r
+\r
+</script>\r
+\r
+<resource id="dialog1">\r
+<![CDATA[\r
+<html>\r
+ <head>\r
+ <title>PrediffLineFilter.sct WinMerge Plugin Options</title>\r
+ <meta content="text/html" charset="ShiftJIS">\r
+ <style>\r
+ body { background-color: lightgray; }\r
+ ul { list-style:none; }\r
+ table { border-collapse: collapse; }\r
+ table, td, th { border: 1px #000000 solid; }\r
+ td { background-color: #FFFFFF; }\r
+ </style>\r
+ <script type="text/javascript">\r
+ var REGKEY_PATH = "HKCU\\Software\\Thingamahoochie\\WinMerge\\Plugins\\PrediffLineFilter.sct\\";\r
+\r
+ function regRead(key, defaultValue) {\r
+ try {\r
+ return (new ActiveXObject("WScript.Shell")).RegRead(key);\r
+ } catch (e) {\r
+ return defaultValue;\r
+ }\r
+ }\r
+\r
+ function regWrite(key, value, type) {\r
+ (new ActiveXObject("WScript.Shell")).RegWrite(key, value, type);\r
+ }\r
+\r
+ function insertRow(r) {\r
+ if (r == -1) {\r
+ r = table1.rows.length;\r
+ }\r
+ var newRow = table1.insertRow(r);\r
+ newRow.insertCell(-1).innerHTML = '<input type="checkbox" name="chkEnabled" ' + (regRead(REGKEY_PATH + "Enabled" + r, true) ? 'checked' : '') + ' />';\r
+ newRow.insertCell(-1).innerHTML = '<input type="checkbox" name="chkUseRegExp" ' + (regRead(REGKEY_PATH + "UseRegExp" + r, false) ? 'checked' : '') + ' />';\r
+ newRow.insertCell(-1).innerHTML = '<input type="text" name="txtPattern" value="' + regRead(REGKEY_PATH + "Pattern" + r, "") + '" />';\r
+ newRow.insertCell(-1).innerHTML = '<input type="text" name="txtReplaceText" value="' + regRead(REGKEY_PATH + "ReplaceText" + r, "") + '" />';\r
+ }\r
+\r
+ function deleteRow(r) {\r
+ if (table1.rows.length > 2) {\r
+ table1.deleteRow(r);\r
+ }\r
+ }\r
+\r
+ function onload() {\r
+\r
+ var w = 800, h = 600;\r
+ window.resizeTo(w, h);\r
+ window.moveTo((screen.width - w) / 2, (screen.height - h) / 2);\r
+\r
+ cboLanguage.selectedIndex = navigator.browserLanguage.substr(0, 2) === 'ja' ? 1 : 0;\r
+ setLanguage(navigator.browserLanguage);\r
+ var count = regRead(REGKEY_PATH + "Count", 1);\r
+ for (var i = 0; i < count; i++) {\r
+ insertRow(-1);\r
+ }\r
+ }\r
+\r
+ function setLanguage(lang) {\r
+ var div = document.getElementById("language") || document.createElement('div')\r
+ div.id = "language";\r
+ var html = '­<style>';\r
+ if (lang.substr(0, 2).toLowerCase() === 'ja') {\r
+ html += '.en { display: none } .ja { display: inline }';\r
+ } else {\r
+ html += '.ja { display: none } .en { display: inline }';\r
+ }\r
+ div.innerHTML = html;\r
+ if (!document.getElementById("language"))\r
+ document.body.appendChild(div);\r
+ }\r
+\r
+ function cboLanguage_onclick() {\r
+ setLanguage(cboLanguage.options[cboLanguage.selectedIndex].text);\r
+ }\r
+\r
+ function btnOk_onclick() {\r
+ regWrite(REGKEY_PATH + "Count", table1.rows.length - 1, "REG_DWORD");\r
+ for (var i = 0; i < table1.rows.length - 1; i++) {\r
+ regWrite(REGKEY_PATH + "Enabled" + (i + 1), document.getElementsByName("chkEnabled")[i].checked, "REG_DWORD");\r
+ regWrite(REGKEY_PATH + "UseRegExp" + (i + 1), document.getElementsByName("chkUseRegExp")[i].checked, "REG_DWORD");\r
+ regWrite(REGKEY_PATH + "Pattern" + (i + 1), document.getElementsByName("txtPattern")[i].value, "REG_SZ");\r
+ regWrite(REGKEY_PATH + "ReplaceText" + (i + 1), document.getElementsByName("txtReplaceText")[i].value, "REG_SZ");\r
+ }\r
+ window.close();\r
+ }\r
+\r
+ function btnCancel_onclick() {\r
+ window.close();\r
+ }\r
+\r
+ </script>\r
+ </head>\r
+ <body onload="onload();">\r
+ <div>\r
+ <ul>\r
+ <li>\r
+ <label class="en">Language: </label>\r
+ <label class="ja">\8c¾\8cê: </label>\r
+ <select id="cboLanguage" onclick="cboLanguage_onclick();" >\r
+ <option value="English">English</option>\r
+ <option value="Japanese">Japanese</option>\r
+ </select>\r
+ </li>\r
+ </ul>\r
+ <ul>\r
+ <li>\r
+ <input class="en" type="button" value="Add" onclick="insertRow(-1)" />\r
+ <input class="ja" type="button" value="\92Ç\89Á" onclick="insertRow(-1)" />\r
+ <input class="en" type="button" value="Delete" onclick="deleteRow(-1)" />\r
+ <input class="ja" type="button" value="\8dí\8f\9c" onclick="deleteRow(-1)" />\r
+ </li>\r
+ </ul>\r
+ <ul>\r
+ <li>\r
+ <table id="table1">\r
+ <tr>\r
+ <th>\r
+ <label class="en">Enabled</label>\r
+ <label class="ja">\97L\8cø</label>\r
+ </th>\r
+ <th>\r
+ <label class="en">Use RegExp</label>\r
+ <label class="ja">\90³\8bK\95\\8c»\82ð\8eg\97p</label>\r
+ </th>\r
+ <th>\r
+ <label class="en">Find what</label>\r
+ <label class="ja">\8c\9f\8dõ\95¶\8e\9a\97ñ</label>\r
+ </th>\r
+ <th>\r
+ <label class="en">Replace with</label>\r
+ <label class="ja">\92u\8a·\8cã\82Ì\95¶\8e\9a\97ñ</label>\r
+ </th>\r
+ </tr>\r
+ </table>\r
+ </li>\r
+ </ul>\r
+ <ul>\r
+ <li>\r
+ <input class="en" type="button" onclick="btnOk_onclick();" value="OK" />\r
+ <input class="en" type="button" onclick="btnCancel_onclick();" value="Cancel" />\r
+ <input class="ja" type="button" onclick="btnOk_onclick();" value="OK" />\r
+ <input class="ja" type="button" onclick="btnCancel_onclick();" value="\83L\83\83\83\93\83Z\83\8b" />\r
+ </li>\r
+ </ul>\r
+ </div>\r
+ </body>\r
+</html>\r
+]]>\r
+</resource>\r
+\r
+</scriptlet>\r