WinMergeのプラグインを作成してみた
ソースコード等の差分を見るときに使用するWinMergeというソフトがあります。
VB6のソースコードを手直しする必要があったので、とりあえず最新かどうかの確認に差分を見てみるとコメントの差分がたくさん出て困りました。
- コメント行を削除
- 連続する空白行を削除
作成したプラグインは、MergePluginsフォルダに入れます。
メニューの[プラグイン]-[自動展開]を選択しておくとファイルを開くだけで、プラグインが適用され同一かの判断をしてくれます。
ファイル名:IgnoreCommentsVB.sct
<scriptlet> <implements type="Automation" id="dispatcher"> <property name="PluginEvent"> <get/> </property> <property name="PluginDescription"> <get/> </property> <property name="PluginFileFilters"> <get/> </property> <property name="PluginIsAutomatic"> <get/> </property> <method name="UnpackFile"/> <method name="PackFile"/> </implements> <script language="VBS"> Option Explicit Function get_PluginEvent() get_PluginEvent = "FILE_PACK_UNPACK" End Function Function get_PluginDescription() get_PluginDescription = "Visual Basic 6.0 のコメントと連続する空白行を削除する" End Function Function get_PluginFileFilters() get_PluginFileFilters = "\.frm$;\.bas$;\.cls$" End Function Function get_PluginIsAutomatic() get_PluginIsAutomatic = True End Function Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode) Dim fso Dim foSrc Dim foDst Dim pos Set fso = CreateObject("Scripting.FileSystemObject") '読み取り専用モード Set foSrc = fso.OpenTextFile(fileSrc, 1, True) '上書きモード Set foDst = fso.OpenTextFile(fileDst, 2, True) '1行づつ読み込んでコメントを削除する '空白行が続く場合は行削除をする Dim srcLine Dim dstLine Dim cntSpace cntSpace = 0 Do Until foSrc.AtEndOfStream srcLine = foSrc.ReadLine 'コメントを検索し以降を削除 '文字列の"'"を考慮していないので注意 pos = InStr(1, srcLine, "'") If pos > 0 Then dstLine = Left(srcLine, pos - 1) Else dstLine = srcLine End If '末尾のスペースを削除 dstLine = RTrim(dstLine) '空白行が2行以上続く場合は出力しない If dstLine = "" Then cntSpace = cntSpace + 1 Else cntSpace = 0 End If If cntSpace <= 1 Then foDst.WriteLine(dstLine) End If Loop foSrc.Close foDst.Close Set foSrc = Nothing Set foDst = Nothing Set fso = Nothing pbChanged = True pSubcode = 0 UnpackFile = True End Function Function PackFile(fileSrc, fileDst, pbChanged, pSubcode) PackFile = False End Function </script> </scriptlet>
プラグインが適用されても元ファイルが変更されることはありません。
コメントが削除されたらどうしよう?と思ったので。
改造するときの手さぐりメモ
- VBScriptで作成をする。
- UnpackFileメソッドを変更する。
- fileSrcにファイルパスが代入されているので、fileDstに編集したソースを書き出す。
比較元、比較先のファイルのことではないので注意。