OSDN Git Service

ecb9d105492dfd81e76aa890c9fad0122ea5dc78
[winmerge-jp/winmerge-jp.git] / Plugins / dlls / PrediffLineFilter.sct
1 <scriptlet>\r
2 <implements type="Automation" id="dispatcher">\r
3   <property name="PluginEvent">\r
4     <get/>\r
5   </property>\r
6   <property name="PluginDescription">\r
7     <get/>\r
8   </property>\r
9   <property name="PluginFileFilters">\r
10     <get/>\r
11   </property>\r
12   <property name="PluginIsAutomatic">\r
13     <get/>\r
14   </property>\r
15   <method name="PrediffBufferW"/>\r
16   <method name="ShowSettingsDialog"/>\r
17 </implements>\r
18 \r
19 <script language="VBS">\r
20 \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
25 '\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
30 '\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
35 '\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
39 '\r
40 \r
41 Option Explicit\r
42 \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
46 \r
47 Function regRead(Key, DefaultValue)\r
48   regRead = DefaultValue\r
49   On Error Resume Next\r
50   regRead = wsh.RegRead(Key)\r
51 End Function\r
52 \r
53 Function get_PluginEvent()\r
54   get_PluginEvent = "BUFFER_PREDIFF"\r
55 End Function\r
56 \r
57 Function get_PluginDescription()\r
58   get_PluginDescription = "Prediff Line Filter"\r
59 End Function\r
60 \r
61 Function get_PluginFileFilters()\r
62   get_PluginFileFilters = "\.nomatch(\..*)?$"\r
63 End Function\r
64 \r
65 Function get_PluginIsAutomatic()\r
66   get_PluginIsAutomatic = True\r
67 End Function\r
68 \r
69 Function SafeUBound(ary)\r
70   On Error Resume Next\r
71   SafeUBound = -1\r
72   SafeUBound = UBound(ary)\r
73 End Function\r
74 \r
75 Function PrediffBufferW(pText, pSize, pbChanged)\r
76   On Error Resume Next\r
77   Dim re, pattern, replaceText, ignoreCase\r
78   Dim count, i, j\r
79   Dim lines\r
80   Set re = New RegExp\r
81   If pText = "" Then\r
82     pbChanged = False\r
83     PrediffBufferW = True\r
84     Exit Function\r
85   End If\r
86   lines = Split(pText, vbLf)\r
87   count = regRead(RegKeyPath & "Count", 0)\r
88   For i = 1 To count\r
89     If regRead(RegKeyPath & "Enabled" & i, True) Then\r
90       If regRead(RegKeyPath & "UseRegExp" & i, True) Then\r
91         re.Global = True\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
97         Next\r
98       Else\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
103           If ignoreCase Then\r
104             lines(j) = Replace(lines(j), pattern, replaceText, 1, -1, vbTextCompare)\r
105           Else\r
106             lines(j) = Replace(lines(j), pattern, replaceText, 1, -1, vbBinaryCompare)\r
107           End If\r
108         Next\r
109       End If\r
110     End If\r
111   Next\r
112   pText = Join(lines, vbLf)\r
113   pSize = Len(pText)\r
114   pbChanged = True\r
115   PrediffBufferW = True\r
116 End Function\r
117 \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
121   Dim mshta\r
122   tfile.Write getResource("dialog1")\r
123   tfile.Close\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
127   End If\r
128   Run wsh, """" & mshta & """ """ & tname & """"\r
129   fso.DeleteFile tname \r
130 End Function\r
131 \r
132 Sub Run(sh, cmd)\r
133   sh.Run cmd, 1, True\r
134 End Sub\r
135 \r
136 </script>\r
137 \r
138 <resource id="dialog1">\r
139 <![CDATA[\r
140 <html>\r
141   <head>\r
142     <title>PrediffLineFilter.sct WinMerge Plugin Options</title>\r
143     <meta content="text/html" charset="Shift_JIS">\r
144     <style>\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
150     </style>\r
151     <script type="text/javascript">\r
152       var REGKEY_PATH = "HKCU\\Software\\Thingamahoochie\\WinMerge\\Plugins\\PrediffLineFilter.sct\\";\r
153 \r
154       function regRead(key, defaultValue) {\r
155         try {\r
156           return (new ActiveXObject("WScript.Shell")).RegRead(key);\r
157         } catch (e) {\r
158           return defaultValue;\r
159         }\r
160       }\r
161 \r
162       function regWrite(key, value, type) {\r
163         (new ActiveXObject("WScript.Shell")).RegWrite(key, value, type);\r
164       }\r
165 \r
166       function insertRow(r) {\r
167         if (r == -1) {\r
168           r = table1.rows.length;\r
169         }\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
178       }\r
179 \r
180       function deleteRow(r) {\r
181         if (table1.rows.length > 2) {\r
182           table1.deleteRow(r);\r
183         }\r
184       }\r
185 \r
186       function onload() {\r
187 \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
191 \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
196           insertRow(-1);\r
197         }\r
198       }\r
199 \r
200       function setLanguage(lang) {\r
201         var div = document.getElementById("language") || document.createElement('div')\r
202         div.id = "language";\r
203         var html = '&shy;<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
206         } else {\r
207           html += '.ja { display: none } .en { display: inline } .textbox { font-family: "Courier New" }';\r
208         }\r
209         div.innerHTML = html;\r
210         if (!document.getElementById("language"))\r
211           document.body.appendChild(div);\r
212       }\r
213 \r
214       function cboLanguage_onclick() {\r
215         setLanguage(cboLanguage.options[cboLanguage.selectedIndex].text);\r
216       }\r
217 \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
226         }\r
227         window.close();\r
228       }\r
229 \r
230       function btnCancel_onclick() {\r
231         window.close();\r
232       }\r
233 \r
234     </script>\r
235   </head>\r
236   <body onload="onload();">\r
237     <div>\r
238       <ul>\r
239         <li>\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
245           </select>\r
246         </li>\r
247       </ul>\r
248       <ul>\r
249         <li>\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
254         </li>\r
255       </ul>\r
256       <ul>\r
257         <li>\r
258           <table id="table1">\r
259             <tr>\r
260               <th>\r
261                 <label class="en">Enabled</label>\r
262                 <label class="ja">\97L\8cø</label>\r
263               </th>\r
264               <th>\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
267               </th>\r
268               <th>\r
269                 <label class="en">Use RegExp</label>\r
270                 <label class="ja">\90³\8bK\95\\8c»\82ð\8eg\97p</label>\r
271               </th>\r
272               <th>\r
273                 <label class="en">Find what</label>\r
274                 <label class="ja">\8c\9f\8dõ\95\8e\9a\97ñ</label>\r
275               </th>\r
276               <th>\r
277                 <label class="en">Replace with</label>\r
278                 <label class="ja">\92u\8a·\8cã\82Ì\95\8e\9a\97ñ</label>\r
279               </th>\r
280             </tr>\r
281           </table>\r
282         </li>\r
283       </ul>\r
284       <ul>\r
285         <li>\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
290         </li>\r
291       </ul>\r
292     </div>\r
293   </body>\r
294 </html>\r
295 ]]>\r
296 </resource>\r
297 \r
298 </scriptlet>\r