たまにプログラムソースでインデントがぐちゃぐちゃのソースにあたったりします。
javaとかcとか
IDE使ってれば
javaだったらeclipseでなんとかなったりするんでしょうが
C言語とかをサクラエディタでメンテナンスとかどうにもならず、せめて{}だけでも
インデント整形できないものかと思いまして
vbscriptでなんちゃって整形プログラム作りました。
すべてに対応してるわけではありませんが、簡易版としてある程度使えます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
field_max=0 '------------------------------------------------- Set objRegExp = new RegExp 'クリップボード取得 tblText = GetClipBoardText() '改行統一 objRegExp.Pattern = "\r\n" row = objRegExp.Replace(row,vbLf) lines = split(trim(tblText),vbLf) outtext ="" '行処理 indent = "" indentOn =false for i = 0 to UBound(lines) : Do row = lines(i) '前方スペース除去 objRegExp.Pattern = "^[\t ]+" row = objRegExp.Replace(row,"") 'チェック用 'コメント除去 checkrow=row objRegExp.Pattern = "\/\/.*$" checkrow = objRegExp.Replace(checkrow,"") objRegExp.Pattern = "\/\*.*\*\/" checkrow = objRegExp.Replace(checkrow,"") '--------------------------------------------------------コメントスキップ if mid(checkrow,1,2)="//" then 'コメント行スキップ row = indent & row outtext = outtext & vbCrLf & row exit do end if objRegExp.Pattern = "\/\*" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then row = indent & row outtext = outtext & vbCrLf & row indentOn =true objRegExp.Pattern = "\*\/" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then indentOn = false end if exit do end if objRegExp.Pattern = "\*\/" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then row = indent & row outtext = outtext & vbCrLf & row indentOn =false objRegExp.Pattern = "\/\*" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then indentOn = true end if exit do end if '--------------------------------------------------------{}チェック objRegExp.Pattern = "\{.*\}" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then '何もせずに行追加 row = indent & row outtext = outtext & vbCrLf & row exit do end if '--------------------------------------------------------}{チェック objRegExp.Pattern = "\}.*\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then 'インデント戻して行追加 if len(indent)> 0 then indent = mid(indent,1,len(indent)-1) end if row = indent & row outtext = outtext & vbCrLf & row 'インデント加算 indent = indent & vbTab exit do end if '--------------------------------------------------------}チェック objRegExp.Pattern = "\}" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then if len(indent)> 0 then indent = mid(indent,1,len(indent)-1) end if 'もどしたインデントで行追加 row = indent & row outtext = outtext & vbCrLf & row '}else{ objRegExp.Pattern = "\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then 'インデント加算 indent = indent & vbTab end if exit do end if '--------------------------------------------------------{チェック objRegExp.Pattern = "\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then '行追加してインデント加算 row = indent & row outtext = outtext & vbCrLf & row indent = indent & vbTab exit do end if row = indent & row outtext = outtext & vbCrLf & row loop until 1 :next SetClipboardText(outtext) MsgBox("クリップボードにコピーしました") '----------------------------------------------------------------- '半角換算文字数 '----------------------------------------------------------------- Function LengthByHankaku(str) Set RegExp = New RegExp RegExp.Global = true '半角文字数 RegExp.Pattern ="[^\x01-\x7E]+" '半角以外をリプレース 半角が残る hankaku = RegExp.Replace(str,"") '全角文字数 RegExp.Pattern ="[\x01-\x7E]+" '半角をリプレース 全角が残る zenkaku = RegExp.Replace(str,"") '換算文字数 colLen = Len(zenkaku)*2 +Len(hankaku) LengthByHankaku = colLen End Function '------------------------------------------------------------------ 'クリップボード取得 '------------------------------------------------------------------ Function GetClipBoardText() dim objHTML Set objHTML = CreateObject("htmlfile") GetClipBoardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("Text")) End Function '------------------------------------------------------------------ 'クリップボードコピー '------------------------------------------------------------------ Function SetClipboardText(text) set WshShell = CreateObject("WScript.Shell") wshShell.Exec("clip").stdIn.write text Set wshShell = nothing End Function |