Софт AHK Auto Indent

Rinat_Namazov

🆁🅸🅽🆆🅰️🆁🅴🆂
Автор темы
Всефорумный модератор
1,142
539
AHK Auto Indent
Восстанавливает табуляцию в скриптах, где ее нет.
Особенно полезно в случае декомпиляции, ведь 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
}
Использовать очень просто, переносим ваш скрипт поверх этого.​
 

Вложения

Последнее редактирование:

Cucumber

Участник
40
17
Сегодня пока шел на учебу точно такая же мысль приходила в голову, что нигде нет автоматической расстановки табуляции, и тут бац ты выкладываешь что-то невероятное
Только сам скрипт в 19 строке выбивает ошибку, и не может найти функцию IsStrStartWith()
 

Rinat_Namazov

🆁🅸🅽🆆🅰️🆁🅴🆂
Автор темы
Всефорумный модератор
1,142
539
Сегодня пока шел на учебу точно такая же мысль приходила в голову, что нигде нет автоматической расстановки табуляции, и тут бац ты выкладываешь что-то невероятное
Только сам скрипт в 19 строке выбивает ошибку, и не может найти функцию IsStrStartWith()
Исправил, перетащил случайно не тот файл. Перекачай.
 
  • Нравится
Реакции: Cucumber