- 1,214
- 1,043
AHK Auto Indent
Восстанавливает табуляцию в скриптах, где ее нет.
Особенно полезно в случае декомпиляции, ведь AHK Script Unpacker восстанавливает лишь табуляцию между блоками {}.
Код:
Использовать очень просто, переносим ваш скрипт поверх этого.
Восстанавливает табуляцию в скриптах, где ее нет.
Особенно полезно в случае декомпиляции, ведь AHK Script Unpacker восстанавливает лишь табуляцию между блоками {}.
Код:
AutoHotKey:
App := {Name: "AHK Auto Indent", Author: "Rinat_Namazov"}
target := A_Args[1]
if (!target)
MsgBox, 0, % App.Name " by " App.Author, Drag and drop your script on top of this!`nПеретащите ваш скрипт поверх этого!
else
{
MakeAutoIndent(target)
SplitPath, target, fileName
TrayTip, % App.Name " by " App.Author, % "Табуляция в файле " fileName " успешно восстановлена"
Sleep, 8000
}
MakeAutoIndent(filePath)
{
source := "", line := "", brackets := 0, oneBracket := false, ignor := false
Loop, Read, % filePath
{
line := Trim(A_LoopReadLine)
indent := ""
if (StrStartsWith(line, "(") && !InStr(line, ")"))
ignor := true
else if (StrStartsWith(line, ")") && !InStr(line, "("))
ignor := false
if (!ignor)
{
if (StrScan(line, "}") && !InStr(line, "{"))
brackets--
Loop, % brackets
indent := "`t" indent
if (oneBracket)
{
oneBracket := false
if (!StrScan(line, "{"))
indent := "`t" indent
}
if (StrScan(line, "{") && !InStr(line, "}"))
brackets++
if (IsActs(line) && !StrScan(str, "{"))
oneBracket := true
}
source .= (ignor ? A_LoopReadLine : indent line) "`n"
}
FileDelete, %filePath%
FileAppend, %source%, %filePath%
}
IsActs(str)
{
acts := ["if", "else", "if else", "while", "loop", "for", "try", "catch", "finally"
, "IfEqual", "IfNotEqual", "IfLess", "IfLessOrEqual", "IfGreater", "IfGreaterOrEqual"
, "IfExist", "IfNotExist", "IfInString", "IfNotInString", "IfMsgBox", "IfWinActive"
, "IfWinNotActive", "IfWinExist", "IfWinNotExist"]
for k, v in acts
{
if (StrStartsWith(str, v))
return true
}
return false
}
StrScan(str, cmd)
{
return StrStartsWith(str, cmd) || StrEndsWith(str, cmd)
}
StrStartsWith(str, cmd)
{
return SubStr(str, 1, StrLen(cmd)) == cmd
}
StrEndsWith(str, cmd)
{
return SubStr(str, 0, StrLen(cmd)) == cmd
}
Вложения
Последнее редактирование: