たまにプログラムソースでインデントがぐちゃぐちゃのソースにあたったりします。
javaとかcとか
IDE使ってれば
javaだったらeclipseでなんとかなったりするんでしょうが
C言語とかをサクラエディタでメンテナンスとかどうにもならず、せめて{}だけでも
インデント整形できないものかと思いまして
vbscriptでなんちゃって整形プログラム作りました。
すべてに対応してるわけではありませんが、簡易版としてある程度使えます

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