Софт AHK Auto Indent

Тема в разделе "AutoHotKey", создана пользователем Rinat_Namazov, 22 янв 2019.

Метки:
  1. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Всефорумный модератор

    Регистрация:
    9 авг 2015
    Сообщения:
    1.134
    Симпатии:
    579
    AHK Auto Indent
    Восстанавливает табуляцию в скриптах, где ее нет.
    Особенно полезно в случае декомпиляции, ведь AHK Script Unpacker восстанавливает лишь табуляцию между блоками {}.

    Код:
    
    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
    }
    
    Использовать очень просто, переносим ваш скрипт поверх этого.​
     

    Вложения:

    #1 Rinat_Namazov, 22 янв 2019
    Последнее редактирование: 22 янв 2019
    iAmerican, fiasco552, #darksoor и 11 другим нравится это.
  2. Cucumber

    Cucumber Активный участник

    Регистрация:
    4 ноя 2018
    Сообщения:
    40
    Симпатии:
    16
    Сегодня пока шел на учебу точно такая же мысль приходила в голову, что нигде нет автоматической расстановки табуляции, и тут бац ты выкладываешь что-то невероятное
    Только сам скрипт в 19 строке выбивает ошибку, и не может найти функцию IsStrStartWith()
    [​IMG]
     
  3. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Всефорумный модератор

    Регистрация:
    9 авг 2015
    Сообщения:
    1.134
    Симпатии:
    579
    Исправил, перетащил случайно не тот файл. Перекачай.
     
    Cucumber нравится это.
  4. DeniskaaaXDD

    DeniskaaaXDD Знающий

    Регистрация:
    10 авг 2016
    Сообщения:
    217
    Симпатии:
    59
    Теперь у меня правильная табуляция!