2 <implements type="Automation" id="dispatcher">
\r
3 <property name="PluginEvent">
\r
6 <property name="PluginDescription">
\r
9 <property name="PluginFileFilters">
\r
12 <property name="PluginIsAutomatic">
\r
15 <method name="PrediffBufferW"/>
\r
16 <method name="ShowSettingsDialog"/>
\r
19 <script language="VBS">
\r
21 '/////////////////////////////////////////////////////////////////////////////
\r
22 ' This is a plugin for WinMerge.
\r
23 ' It will display the text content of MS Excel files.
\r
24 ' Copyright (C) 2018 Takashi Sawanaka
\r
26 ' This program is free software; you can redistribute it and/or modify
\r
27 ' it under the terms of the GNU General Public License as published by
\r
28 ' the Free Software Foundation; either version 2 of the License, or
\r
29 ' (at your option) any later version.
\r
31 ' This program is distributed in the hope that it will be useful,
\r
32 ' but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
33 ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
34 ' GNU General Public License for more details.
\r
36 ' You should have received a copy of the GNU General Public License
\r
37 ' along with this program; if not, write to the Free Software
\r
38 ' Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\r
43 Const RegKeyPath = "HKCU\Software\Thingamahoochie\WinMerge\Plugins\PrediffLineFilter.sct\"
\r
44 Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
\r
45 Dim wsh: Set wsh = CreateObject("WScript.Shell")
\r
47 Function regRead(Key, DefaultValue)
\r
48 regRead = DefaultValue
\r
49 On Error Resume Next
\r
50 regRead = wsh.RegRead(Key)
\r
53 Function get_PluginEvent()
\r
54 get_PluginEvent = "BUFFER_PREDIFF"
\r
57 Function get_PluginDescription()
\r
58 get_PluginDescription = "Prediff Line Filter"
\r
61 Function get_PluginFileFilters()
\r
62 get_PluginFileFilters = "\.nomatch(\..*)?$"
\r
65 Function get_PluginIsAutomatic()
\r
66 get_PluginIsAutomatic = True
\r
69 Function SafeUBound(ary)
\r
70 On Error Resume Next
\r
72 SafeUBound = UBound(ary)
\r
75 Function PrediffBufferW(pText, pSize, pbChanged)
\r
76 On Error Resume Next
\r
77 Dim re, pattern, replaceText, ignoreCase
\r
83 PrediffBufferW = True
\r
86 lines = Split(pText, vbLf)
\r
87 count = regRead(RegKeyPath & "Count", 0)
\r
89 If regRead(RegKeyPath & "Enabled" & i, True) Then
\r
90 If regRead(RegKeyPath & "UseRegExp" & i, True) Then
\r
92 re.Pattern = regRead(RegKeyPath & "Pattern" & i, "")
\r
93 re.IgnoreCase = regRead(RegKeyPath & "IgnoreCase" & i, False)
\r
94 replaceText = regRead(RegKeyPath & "ReplaceText" & i, "")
\r
95 For j = 0 To SafeUBound(lines)
\r
96 lines(j) = re.Replace(lines(j), replaceText)
\r
99 pattern = regRead(RegKeyPath & "Pattern" & i, "")
\r
100 replaceText = regRead(RegKeyPath & "ReplaceText" & i, "")
\r
101 ignoreCase = regRead(RegKeyPath & "IgnoreCase" & i, False)
\r
102 For j = 0 To SafeUBound(lines)
\r
104 lines(j) = Replace(lines(j), pattern, replaceText, 1, -1, vbTextCompare)
\r
106 lines(j) = Replace(lines(j), pattern, replaceText, 1, -1, vbBinaryCompare)
\r
112 pText = Join(lines, vbLf)
\r
115 PrediffBufferW = True
\r
118 Function ShowSettingsDialog()
\r
119 Dim tname: tname = fso.BuildPath(fso.GetSpecialFolder(2), fso.GetTempName() & ".hta")
\r
120 Dim tfile: Set tfile = fso.CreateTextFile(tname)
\r
122 tfile.Write getResource("dialog1")
\r
124 mshta = wsh.ExpandEnvironmentStrings("%SystemRoot%\mshta.exe")
\r
125 If Not fso.FileExists(mshta) Then
\r
126 mshta = wsh.ExpandEnvironmentStrings("%SystemRoot%\SysWOW64\mshta.exe")
\r
128 Run wsh, """" & mshta & """ """ & tname & """"
\r
129 fso.DeleteFile tname
\r
133 sh.Run cmd, 1, True
\r
138 <resource id="dialog1">
\r
142 <title>PrediffLineFilter.sct WinMerge Plugin Options</title>
\r
143 <meta content="text/html" charset="Shift_JIS">
\r
145 body { background-color: lightgray; }
\r
146 ul { list-style:none; }
\r
147 table { border-collapse: collapse; }
\r
148 table, td, th { border: 1px #000000 solid; }
\r
149 td { background-color: #FFFFFF; }
\r
151 <script type="text/javascript">
\r
152 var REGKEY_PATH = "HKCU\\Software\\Thingamahoochie\\WinMerge\\Plugins\\PrediffLineFilter.sct\\";
\r
154 function regRead(key, defaultValue) {
\r
156 return (new ActiveXObject("WScript.Shell")).RegRead(key);
\r
158 return defaultValue;
\r
162 function regWrite(key, value, type) {
\r
163 (new ActiveXObject("WScript.Shell")).RegWrite(key, value, type);
\r
166 function insertRow(r) {
\r
168 r = table1.rows.length;
\r
170 var newRow = table1.insertRow(r);
\r
171 newRow.insertCell(-1).innerHTML = '<input type="checkbox" name="chkEnabled" ' + (regRead(REGKEY_PATH + "Enabled" + r, true) ? 'checked' : '') + ' />';
\r
172 newRow.insertCell(-1).innerHTML = '<input type="checkbox" name="chkIgnoreCase" ' + (regRead(REGKEY_PATH + "IgnoreCase" + r, false) ? 'checked' : '') + ' />';
\r
173 newRow.insertCell(-1).innerHTML = '<input type="checkbox" name="chkUseRegExp" ' + (regRead(REGKEY_PATH + "UseRegExp" + r, false) ? 'checked' : '') + ' />';
\r
174 newRow.insertCell(-1).innerHTML = '<input class="textbox" type="text" name="txtPattern" value="" />'
\r
175 newRow.insertCell(-1).innerHTML = '<input class="textbox" type="text" name="txtReplaceText" value="" />'
\r
176 newRow.cells[3].childNodes[0].value = regRead(REGKEY_PATH + "Pattern" + r, "");
\r
177 newRow.cells[4].childNodes[0].value = regRead(REGKEY_PATH + "ReplaceText" + r, "");
\r
180 function deleteRow(r) {
\r
181 if (table1.rows.length > 2) {
\r
182 table1.deleteRow(r);
\r
186 function onload() {
\r
188 var w = 800, h = 600;
\r
189 window.resizeTo(w, h);
\r
190 window.moveTo((screen.width - w) / 2, (screen.height - h) / 2);
\r
192 cboLanguage.selectedIndex = navigator.browserLanguage.substr(0, 2) === 'ja' ? 1 : 0;
\r
193 setLanguage(navigator.browserLanguage);
\r
194 var count = regRead(REGKEY_PATH + "Count", 1);
\r
195 for (var i = 0; i < count; i++) {
\r
200 function setLanguage(lang) {
\r
201 var div = document.getElementById("language") || document.createElement('div')
\r
202 div.id = "language";
\r
203 var html = '­<style>';
\r
204 if (lang.substr(0, 2).toLowerCase() === 'ja') {
\r
205 html += '.en { display: none } .ja { display: inline } .textbox { font-family: "MS Gothic" }';
\r
207 html += '.ja { display: none } .en { display: inline } .textbox { font-family: "Courier New" }';
\r
209 div.innerHTML = html;
\r
210 if (!document.getElementById("language"))
\r
211 document.body.appendChild(div);
\r
214 function cboLanguage_onclick() {
\r
215 setLanguage(cboLanguage.options[cboLanguage.selectedIndex].text);
\r
218 function btnOk_onclick() {
\r
219 regWrite(REGKEY_PATH + "Count", table1.rows.length - 1, "REG_DWORD");
\r
220 for (var i = 0; i < table1.rows.length - 1; i++) {
\r
221 regWrite(REGKEY_PATH + "Enabled" + (i + 1), document.getElementsByName("chkEnabled")[i].checked, "REG_DWORD");
\r
222 regWrite(REGKEY_PATH + "IgnoreCase" + (i + 1), document.getElementsByName("chkIgnoreCase")[i].checked, "REG_DWORD");
\r
223 regWrite(REGKEY_PATH + "UseRegExp" + (i + 1), document.getElementsByName("chkUseRegExp")[i].checked, "REG_DWORD");
\r
224 regWrite(REGKEY_PATH + "Pattern" + (i + 1), document.getElementsByName("txtPattern")[i].value, "REG_SZ");
\r
225 regWrite(REGKEY_PATH + "ReplaceText" + (i + 1), document.getElementsByName("txtReplaceText")[i].value, "REG_SZ");
\r
230 function btnCancel_onclick() {
\r
236 <body onload="onload();">
\r
240 <label class="en">Language: </label>
\r
241 <label class="ja">
\8c¾
\8cê: </label>
\r
242 <select id="cboLanguage" onclick="cboLanguage_onclick();" >
\r
243 <option value="English">English</option>
\r
244 <option value="Japanese">Japanese</option>
\r
250 <input class="en" type="button" value="Add" onclick="insertRow(-1)" />
\r
251 <input class="ja" type="button" value="
\92Ç
\89Á" onclick="insertRow(-1)" />
\r
252 <input class="en" type="button" value="Delete" onclick="deleteRow(-1)" />
\r
253 <input class="ja" type="button" value="
\8dí
\8f\9c" onclick="deleteRow(-1)" />
\r
258 <table id="table1">
\r
261 <label class="en">Enabled</label>
\r
262 <label class="ja">
\97L
\8cø</label>
\r
265 <label class="en">Ignore Case</label>
\r
266 <label class="ja">
\91å
\95¶
\8e\9a\8f¬
\95¶
\8e\9a\82Ì
\88á
\82¢
\82ð
\96³
\8e\8b</label>
\r
269 <label class="en">Use RegExp</label>
\r
270 <label class="ja">
\90³
\8bK
\95\
\8c»
\82ð
\8eg
\97p</label>
\r
273 <label class="en">Find what</label>
\r
274 <label class="ja">
\8c\9f\8dõ
\95¶
\8e\9a\97ñ</label>
\r
277 <label class="en">Replace with</label>
\r
278 <label class="ja">
\92u
\8a·
\8cã
\82Ì
\95¶
\8e\9a\97ñ</label>
\r
286 <input class="en" type="button" onclick="btnOk_onclick();" value="OK" />
\r
287 <input class="en" type="button" onclick="btnCancel_onclick();" value="Cancel" />
\r
288 <input class="ja" type="button" onclick="btnOk_onclick();" value="OK" />
\r
289 <input class="ja" type="button" onclick="btnCancel_onclick();" value="
\83L
\83\83\83\93\83Z
\83\8b" />
\r