Sign in to follow this  
Followers 0
AZJIO

Tool display variables and functions script

3 posts in this topic

#1 ·  Posted (edited)

The script is designed to show the variables and functions in the scripts, to avoid duplication, to be able to fearlessly copy of the code of one script to another. Allows you to keep track of variable names to avoid duplication when you want to rename a variable, eg $Path and $PathName. When replacing the $Path will damage $PathName, so you need to temporarily rename $PathName, then rename $Path, and then restore the $PathName. Variables and functions are displayed in one instance and sorted. The window supports drag-and-drop, and resize. The time counter shows the reading of the script or scripts directory.

To take the list of local variables: Copy "Func...EndFunc" to the clipboard, click "clipboard>", and then "Local". In a clipboard there will be a string.

Can throw the script out the window or directory scripts. In the latter case, the output only functions. Also specify the path to the script at the command prompt, which is convenient when working in a text editor.

C:AutoIt3Notepad++shortcuts.xml

<!-->
Alt+F8 - list_var_funk
</!-->
<Command name="list_var_funk" Ctrl="no" Alt="yes" Shift="no" Key="119">&quot;$(NPP_DIRECTORY)\..\AutoIt3.exe&quot; &quot;$(NPP_DIRECTORY)\Instrument_azjio\list_var_funk.au3&quot; &quot;$(FULL_CURRENT_PATH)&quot;</Command>

C:AutoIt3SciTEPropertiesau3.properties

# 34 list_var_funk
command.34.$(au3)="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\Instrument_azjio\list_var_funk.au3" "$(FilePath)"
command.name.34.$(au3)=list_var_funk
command.shortcut.34.$(au3)=Alt+F8
command.subsystem.34.$(au3)=0
command.save.before.34.$(au3)=1
command.is.filter.34.$(au3)=1
command.quiet.34.$(au3)=1

Hotkeys
Ctrl + Left Arrow - a list of variables to copy to clipboard
Ctrl + Right Arrow - a list of functions to copy to clipboard
Ctrl + Down Arrow - imported from Clipboard
Ctrl + Up Arrow - a list of variables to copy to the clipboard as a local variable

;  @AZJIO 25.10.2010 - 31.08.2013
#include <File.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

; En
$LngTitle = 'Variables and Functions'
$LngFO1 = 'Select File.'
$LngFO2 = 'Script'
$LngMs1 = 'Message'
$LngMs2 = 'No variables.' & @CRLF & 'Continue?'
$LngMs3 = 'Not found.'
$LngMs4 = 'Delete constants?'
$LngMs5 = 'Loop variables:'
$LngMs6 = 'Variables constants:'
$LngMs7 = 'Variables passed to the function:'
$LngMs8 = 'The following variables are removed from the result'
$LngMs9 = 'Delete the global variables by hand!'
$LngLVr = 'Variables'
$LngLFu = 'Functions'
$LngStr = 'Strings'
$LngLPc = 'pieces'
$LngCb1 = '> clipboard'
$LngCbH1 = 'Copy the list of variables' & @CRLF & 'to the clipboard'
$LngCb2 = 'clipboard >'
$LngCbH2 = 'Import from the clipboard' & @CRLF & 'and show a list of variables'
$LngLcH = 'List as a local' & @CRLF & 'variable declaration'
$LngCbHF = 'Copy the list of functions' & @CRLF & 'to the clipboard'
$LngInc = 'See all the functions' & @CRLF & 'in the directory "Include"'
$LngLt1 = 'Done in'
$LngLt2 = 'sec'
$LngUse = 'Use'
$LngRep = 'Counting the number ' & @CRLF & 'of repetitions of variables'
$LngOpi = 'Open the file folder "Include"'
$helpmsg = 'Hotkeys' & @CRLF & @CRLF & _
        'Ctrl + Left Arrow - a list of variables to copy to clipboard' & @CRLF & _
        'Ctrl + Right Arrow - a list of functions to copy to clipboard' & @CRLF & _
        'Ctrl + Down Arrow - imported from Clipboard' & @CRLF & _
        'Ctrl + Up Arrow - a list of variables to copy to the clipboard as a local variable declaration' & @CRLF & @CRLF & _
        'Can throw the script out the window or directory scripts.  In the latter case, the output only functions.  Also specify the path to the script at the command prompt, which is convenient when working in a text editor.' & @CRLF & @CRLF & _
        'The script is designed to show the variables and functions in the scripts, to avoid duplication, to be able to fearlessly copy of the code of one script to another. Allows you to keep track of variable names to avoid duplication when you want to rename a variable, eg $Path and $PathName. When replacing the $Path will damage $PathName, so you need to temporarily rename $PathName, then rename $Path, and then restore the $PathName. Variables and functions are displayed in one instance and sorted. The window supports drag-and-drop, and resize. The time counter shows the reading of the script or scripts directory.'

; Ru
; если русская локализация, то русский язык
If @OSLang = 0419 Then
    $LngTitle = 'Переменные и функции'
    $LngFO1 = 'Выбор файла.'
    $LngFO2 = 'Скрипт'
    $LngMs1 = 'Сообщение'
    $LngMs2 = 'Нет переменных.' & @CRLF & 'Продолжить?'
    $LngMs3 = 'Не найдено.'
    $LngMs4 = 'Удалить константы?'
    $LngMs5 = 'Переменные цикла:'
    $LngMs6 = 'Переменные константы:'
    $LngMs7 = 'Переменные переданные в функцию:'
    $LngMs8 = 'Из результата удалены следующие переменные'
    $LngMs9 = 'Удалите глобальные переменные вручную!'
    $LngLVr = 'Переменные'
    $LngLFu = 'Функции'
    $LngStr = 'Строки'
    $LngLPc = 'шт'
    $LngCb1 = 'в буфер'
    $LngCbH1 = 'Скопировать список переменных ' & @CRLF & 'в буфер обмена'
    $LngCb2 = 'из буфера'
    $LngCbH2 = 'Прочитать код из буфера' & @CRLF & 'и показать список переменных'
    $LngLcH = 'Список в виде локального' & @CRLF & 'объявления переменных'
    $LngCbHF = 'Скопировать список функций ' & @CRLF & 'в буфер обмена'
    $LngInc = 'Показать все функции' & @CRLF & 'каталога Include'
    $LngLt1 = 'Выполнено за'
    $LngLt2 = 'сек'
    $LngUse = 'Используйте'
    $LngRep = 'Подсчитывать количество' & @CRLF & 'повторов переменных'
    $LngOpi = 'Открыть файл папки Include'
    $helpmsg = 'Горячие клавиши' & @CRLF & @CRLF & _
            'Ctrl+стрелка влево - список переменных скопировать в буфер обмена' & @CRLF & _
            'Ctrl+стрелка вправо - список функций скопировать в буфер обмена' & @CRLF & _
            'Ctrl+стрелка вниз - обработать буфер обмена' & @CRLF & _
            'Ctrl+стрелка вверх - список переменных скопировать в буфер обмена в виде локального объявления переменных' & @CRLF & @CRLF & _
            'Можете кинуть скрипт в окно или каталог скриптов. В последнем случае вывод только функций. Также указать путь к скрипту в ком-строке, что удобно при работе в текстовом редакторе имеющего вызов других утилит.' & @CRLF & @CRLF & _
            'Скрипт предназначен для просмотра переменных и функций в скриптах на предмет пересечения, для возможности безбоязненно копировать часть кода одного скрипта в другой. Также позволяет визуально отследить что при выполнении замены имени переменной не произойдёт порча близкой по имени переменной, например $Path и $PathName. При замене $Path испортится $PathName, поэтому можно временно переименовать сначала $PathName, а потом $Path и далее восстановить $PathName. Переменные и функции читаются из скрипта в одном экзэмпляре и сортируются. Окно поддерживает drag-and-drop, и изменение размера окна. Счётчик времени показывает время считывания скрипта или каталога скриптов.'
EndIf

#include<Array.au3>
Opt("GUIResizeMode", 802)
$bufer_read33 = 0 ; если 1 то читаем из буфера, если 0 то диалог выбора файла
Global $k, $kf, $text01, $text02, $text0, $text, $Info_Edit1, $Info_Edit2, $Time, $timer, $FileName = '', $FilePath

If $CmdLine[0] = 0 Then
    If $bufer_read33 = 1 Then
        $text = ClipGet()
    Else
        $Path = FileOpenDialog($LngFO1, @WorkingDir & "", $LngFO2 & " (*.au3)", 1 + 4)
        If @error Then Exit
        $FileName = StringRegExpReplace($Path, '(^.*)\\(.*)$', '\2')
        $file = FileOpen($Path, 0)
        $text = FileRead($file)
        FileClose($file)
        $FilePath = $Path
    EndIf
Else
    If FileExists($CmdLine[1]) Then
        $file = FileOpen($CmdLine[1], 0)
        $text = FileRead($file)
        FileClose($file)
        $FileName = StringRegExpReplace($CmdLine[1], '(^.*)\\(.*)$', '\2')
        $FilePath = $CmdLine[1]
    EndIf
EndIf

Global $TrChe = 0
_ReadAU3($text)

If $k = 0 And MsgBox(4, $LngMs1, $LngMs2) = 7 Then Exit
If $k < 25 Then
    $pos = $k
    If $k = 0 Then $pos = 5
Else
    $pos = 25
EndIf

$Gui = GUICreate($LngTitle, 410, $pos * 17 + 110, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)
$CatchDrop = GUICtrlCreateLabel("", 0, 0, 410, $pos * 17 + 120)
GUICtrlSetState(-1, $GUI_DISABLE + $GUI_DROPACCEPTED)
GUICtrlSetResizing(-1, 1)
$per = GUICtrlCreateLabel($LngLVr & ' - ' & $k & ' ' & $LngLPc, 8, 3, 190, 17)
GUICtrlSetResizing(-1, 1 + 2 + 32 + 512)
$fun = GUICtrlCreateLabel($LngLFu & ' - ' & $kf & ' ' & $LngLPc, 208, 3, 190, 17)
GUICtrlSetResizing(-1, 1 + 4 + 32 + 512)
$Info_Edit1 = GUICtrlCreateEdit($text01, 8, 22, 190, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1 + 2 + 32 + 64)
$Info_Edit2 = GUICtrlCreateEdit($text02, 208, 22, 190, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1 + 4 + 32 + 64)
$iToClipboardVar = GUICtrlCreateButton($LngCb1, 8, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngCbH1)
$iFromClipboard = GUICtrlCreateButton($LngCb2, 72, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngCbH2)
$iLocalToClipboard = GUICtrlCreateButton('Local', 136, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngLcH)
$iToClipboardFunc = GUICtrlCreateButton($LngCb1, 208, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngCbHF)
$Include = GUICtrlCreateButton('Include', 272, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngInc)
$iStr = GUICtrlCreateButton('Str', 336, $pos * 17 + 67, 37, 22)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
$help = GUICtrlCreateButton('?', 375, $pos * 17 + 67, 22, 22)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
$Time = GUICtrlCreateLabel($LngLt1 & ' ' & Round($timer / 1000, 1) & ' ' & $LngLt2, 8, $pos * 17 + 93, 160, 17)
GUICtrlSetResizing(-1, 1 + 64 + 512)
GUICtrlCreateLabel($LngUse & ' drag-and-drop', 178, $pos * 17 + 93, 160, 17)
GUICtrlSetResizing(-1, 1 + 64 + 512)
If $FileName <> '' Then WinSetTitle($Gui, '', $FileName & ' - ' & $LngTitle)

$Che = GUICtrlCreateCheckbox('N', 340, $pos * 17 + 67 + 24, 25, 17)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngRep)
$OpInc = GUICtrlCreateButton('Open', 369, $pos * 17 + 67 + 24, 36, 18)
GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512)
GUICtrlSetTip(-1, $LngOpi)

Dim $AccelKeys[4][2] = [["^{LEFT}", $iToClipboardVar],["^{RIGHT}", $iToClipboardFunc],["^{DOWN}", $iFromClipboard],["^{UP}", $iLocalToClipboard]]

GUISetAccelerators($AccelKeys)

GUISetState()
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")
Send('^{HOME}')

While 1
    Switch GUIGetMsg()
        Case $iStr
            $text = FileRead($FilePath)
            $kf = 0
            $text02 = ''
            _stripComments($text) ; Удаление комментариев
            $text=StringRegExp($text, '(?m)"[^"]*?"|''[^'']*?''', 3) ; Извлечение строк заключённых в кавычки
            If @error Then
                GUICtrlSetData($Info_Edit2, '')
            Else
                $kf = UBound($text)
                For $i In $text ; объединение массива в многостроковый текст
                    $text02 &= $i & @CRLF
                Next
                GUICtrlSetData($Info_Edit2, $text02)
            EndIf
            GUICtrlSetData($fun, $LngStr & ' - ' & $kf & ' ' & $LngLPc)
        Case $OpInc
            $tmp = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & '\Include'
            If @error Or Not FileExists($tmp) Then $tmp = @WorkingDir
            $tmp = FileOpenDialog('Open', $tmp, 'Script (*.au3)', 1, '', $Gui)
            If @error Then ContinueLoop
            $FilePath = $tmp
            _OpenFile($tmp)
        Case $Include
            $tmp = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & '\Include'
            If @error Or Not FileExists($tmp) Then ContinueLoop
            _Include($tmp)
        Case $iLocalToClipboard
            $tmp = StringRegExpReplace(GUICtrlRead($Info_Edit1), @CRLF & '\$', ', $')
            $tmp = StringReplace($tmp, @CRLF, '') & ', ' ; удаляет лишние переносы и в конец строки добавляет
            $tmp1 = ClipGet()
            _stripComments($tmp1) ; Удаление комментариев
            $tmp1 = StringRegExpReplace($tmp1, '(?m)"[^"]*?"|''[^'']*?''', '') ; Удаление строк заключённых в кавычки
            Local $DelLocal[1] = [0]
            $DelLocalTmp = ''

            ; Удаление переменных счётчика цикла
            $aTmp = StringRegExp($tmp1, '(?mi)For\h+(\$\w+)\h*=\h*\d+\h+To\h+', 3) ; Определяем наличие переменных счётчика цикла
            If Not @error Then
                _ArrayUnique2($aTmp)
                _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив
                $DelLocalTmp &= $LngMs5 & @LF ; Переменные константы:
                For $i = 0 To UBound($aTmp) - 1
                    $DelLocalTmp &= @TAB & $aTmp[$i] & @LF
                Next
            EndIf

            ; Удаление констант
            $aTmp = StringRegExp($tmp1, '\$[_A-Z\d]+(?!\w)', 3)
            If Not @error Then
                _ArrayUnique2($aTmp)
                $Tmp2 = ''
                For $i = 0 To UBound($aTmp) - 1
                    $Tmp2 &= @TAB & $aTmp[$i] & @LF
                Next
                If MsgBox(4, $LngMs1, $LngMs4 & @LF & $Tmp2, 0, $Gui) = 6 Then ; Удалить константы?
                    _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив
                    $DelLocalTmp &= $LngMs6 & @LF ; Переменные цикла:'
                    $DelLocalTmp &= $Tmp2
                EndIf
            EndIf

            ; Удаление переданных в функцию переменных
            $aTmp = StringRegExp($tmp1, '(?m)^\s*Func\h+\w+?\h*\((.+)\)', 1) ; Содержимое 1-ой строки
            If Not @error And StringInStr($aTmp[0], '$') Then
                $aTmp = StringRegExp($aTmp[0], '\$\w+', 3) ; Парсит содержимое 1-ой строки
                ; If Not @error Then _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив
                If Not @error Then
                    _ArrayUnique2($aTmp)
                    _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив
                    $DelLocalTmp &= $LngMs7 & @LF ; Переменные переданные в функцию:
                    For $i = 0 To UBound($aTmp) - 1
                        $DelLocalTmp &= @TAB & $aTmp[$i] & @LF
                    Next
                EndIf
            EndIf

            For $i = 1 To UBound($DelLocal) - 1
                $tmp = StringReplace($tmp, $DelLocal[$i] & ', ', '') ; Удаляет из результата недопустимые переменные: счётчик цикла, константы и переданные в функцию
            Next

            $tmp = StringRegExpReplace($tmp, '(, ){2,}', '\1')
            If StringRight($tmp, 2) = ', ' Then $tmp = StringTrimRight($tmp, 2)
            ClipPut(@CRLF & @TAB & 'Local ' & $tmp)
            If $DelLocalTmp Then MsgBox(0, $LngMs8, $DelLocalTmp & @LF & $LngMs9, 0, $Gui)
        Case $iFromClipboard
            _ReadAU3(ClipGet())
            GUICtrlSetData($per, $LngLVr & ' - ' & $k & ' ' & $LngLPc)
            GUICtrlSetData($fun, $LngLFu & ' - ' & $kf & ' ' & $LngLPc)
            WinSetTitle($Gui, '', $LngCb2 & ' - ' & $LngTitle)
        Case $iToClipboardVar
            ClipPut(GUICtrlRead($Info_Edit1))
        Case $iToClipboardFunc
            ClipPut(GUICtrlRead($Info_Edit2))
        Case $Che
            If GUICtrlRead($Che) = 1 Then
                $TrChe = 1
            Else
                $TrChe = 0
            EndIf
            If FileExists($FilePath) Then
                _OpenFile($FilePath)
            EndIf
        Case $GUI_EVENT_DROPPED
            $FilePath = @GUI_DragFile
            _OpenFile(@GUI_DragFile)
        Case $help
            _MsgFile()
        Case -3
            Exit
    EndSwitch
WEnd

Func _OpenFile($sPath)
    If StringInStr(FileGetAttrib($sPath), "D") Then
        _Include($sPath)
    ElseIf StringRight($sPath, 4) = '.au3' Then
        _ReadAU3(FileRead($sPath))
        GUICtrlSetData($per, $LngLVr & ' - ' & $k & ' ' & $LngLPc)
        GUICtrlSetData($fun, $LngLFu & ' - ' & $kf & ' ' & $LngLPc)
        WinSetTitle($Gui, '', StringRegExpReplace($sPath, '(^.*)\\(.*)$', '\2') & ' - ' & $LngTitle)
    EndIf
EndFunc   ;==>_OpenFile

Func _Include($sPath)
    $search = _FileListToArray($sPath, '*.au3', 1)
    If @error Then
        MsgBox(0, $LngMs1, $LngMs3)
        Return
    EndIf
    Local $aText, $lkf
    $textAll = ''
    $timer = TimerInit()
    For $i = 1 To $search[0]
        $aText = StringRegExp(FileRead($sPath & '\' & $search[$i]), '(?:\sFunc)\s+(\w*)', 3)
        If @error Then
            $textAll &= @CRLF & '- - - - ' & $search[$i] & ' - - - -'
        Else
            $lkf += UBound($aText)
            $textAll &= @CRLF & @CRLF & @CRLF & '+++++ ' & $search[$i] & ' +++++' & @CRLF & @CRLF
            GUICtrlSetData($Time, $search[$i])
            For $j In $aText
                $textAll &= $j & @CRLF
            Next
        EndIf
    Next
    WinSetTitle($Gui, '', StringRegExpReplace($sPath, '(^.*)\\(.*)$', '\2') & ' - ' & $LngTitle)
    GUICtrlSetData($Info_Edit2, $textAll)
    GUICtrlSetData($Info_Edit1, '')
    GUICtrlSetData($per, $LngLVr)
    GUICtrlSetData($fun, $LngLFu & ' - ' & $lkf & ' ' & $LngLPc)
    $timer = TimerDiff($timer)
    GUICtrlSetData($Time, $LngLt1 & ' ' & Round($timer / 1000, 2) & ' ' & $LngLt2)
EndFunc   ;==>_Include

Func _ReadAU3($text)
    $timer = TimerInit() ; засекаем время
    _stripComments($text) ; Удаление комментариев
    $text = StringRegExpReplace($text, '(?m)"[^"]*?"|''[^'']*?''', '') ; Удаление строк заключённых в кавычки
    ; начинаем поиск переменных
    $k = 0
    $aNameVar = StringRegExp($text, '(?<=\$)\w+', 3) ; детектируем переменные в массив
    $text01 = ''
    If @error Then
        GUICtrlSetData($Info_Edit1, '')
    Else
        For $i = 0 To UBound($aNameVar) - 1 ; Вычисляем количество дубликатов переменных
            Assign($aNameVar[$i] & '/', Eval($aNameVar[$i] & '/') + 1, 1)
            If Eval($aNameVar[$i] & '/') = 1 Then
                $aNameVar[$k] = $aNameVar[$i]
                $k += 1
            EndIf
        Next
        ReDim $aNameVar[$k]

        _ArraySort($aNameVar) ; сортировка массива

        If $TrChe = 1 Then
            For $i = 0 To UBound($aNameVar) - 1
                $text01 &= "$" & $aNameVar[$i] & ' - ' & Eval($aNameVar[$i] & '/') & @CRLF
            Next
        Else
            For $i = 0 To UBound($aNameVar) - 1
                $text01 &= "$" & $aNameVar[$i] & @CRLF
            Next
        EndIf

        GUICtrlSetData($Info_Edit1, $text01)
    EndIf

    ; начинаем поиск функций
    $kf = 0
    $aFunc = StringRegExp($text, '\s\h*Func\h+(\w+)', 3) ; детектируем функции в массив
    $text02 = ''
    If @error Then
        GUICtrlSetData($Info_Edit2, '')
    Else
        _ArraySort($aFunc) ; сортировка массива
        $kf = UBound($aFunc)
        For $i In $aFunc ; объединение массива в многостроковый текст
            $text02 &= $i & @CRLF
        Next
        ; конец поиск функций
        GUICtrlSetData($Info_Edit2, $text02)
    EndIf
    $timer = TimerDiff($timer)
    GUICtrlSetData($Time, $LngLt1 & ' ' & Round($timer / 1000, 2) & ' ' & $LngLt2)
EndFunc   ;==>_ReadAU3

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    If $hWnd = $Gui Then
        Local $aWorkArea = _WinAPI_GetWorkingArea()
        Local $tMINMAXINFO = DllStructCreate("int;int;" & _
                "int MaxSizeX; int MaxSizeY;" & _
                "int MaxPositionX;int MaxPositionY;" & _
                "int MinTrackSizeX; int MinTrackSizeY;" & _
                "int MaxTrackSizeX; int MaxTrackSizeY", _
                $lParam)
        DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 410) ; минимальные размеры окна
        DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 200)
        DllStructSetData($tMINMAXINFO, "MaxPositionX", $aWorkArea[0])
        DllStructSetData($tMINMAXINFO, "MaxPositionY", $aWorkArea[1])
        DllStructSetData($tMINMAXINFO, "MaxSizeX", 600) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
        DllStructSetData($tMINMAXINFO, "MaxSizeY", $aWorkArea[3] - $aWorkArea[1])
    EndIf
EndFunc   ;==>WM_GETMINMAXINFO

Func _WinAPI_GetWorkingArea()
    Local Const $SPI_GETWORKAREA = 48
    Local $stRECT = DllStructCreate("long; long; long; long")

    Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
    If @error Then Return 0
    If $SPIRet[0] = 0 Then Return 0

    Local $sLeftArea = DllStructGetData($stRECT, 1)
    Local $sTopArea = DllStructGetData($stRECT, 2)
    Local $sRightArea = DllStructGetData($stRECT, 3)
    Local $sBottomArea = DllStructGetData($stRECT, 4)

    Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
    Return $aRet
EndFunc   ;==>_WinAPI_GetWorkingArea

Func _MsgFile()
    GUISetState(@SW_DISABLE, $Gui)
    $Gui1 = GUICreate($LngMs1, 500, 340, -1, -1, -1, 0x00000080, $Gui)
    GUICtrlCreateLabel($helpmsg, 15, 10, 480, 330)
    GUISetState(@SW_SHOW, $Gui1)
    While 1
        If GUIGetMsg() = -3 Then
            GUISetState(@SW_ENABLE, $Gui)
            GUIDelete($Gui1)
            ExitLoop
        EndIf
    WEnd
EndFunc   ;==>_MsgFile

; заимствовано из "Organize Includes"
Func _stripComments(ByRef $string)
    $string = StringRegExpReplace($string, "(?s)\r(?!\n)", '\r\n') ; ??? добавляем @LF в строку, если его нет (AZJIO)
    ;Author: Prog@ndy
    $string = StringReplace(StringReplace($string, "#comments-start", "#cs", 0, 2), "#comments-end", "#ce", 0, 2)
    ; $string = StringRegExpReplace($string, "(?si)(\v|\A)\h*#cs\b.*?\v\h*#ce\b", '') ; remove simple block comments (mod AZJIO)
    #region remove nested block-comments
    Local $match, $depth, $offset, $start, $CommentsAfterce
    While 1
        $depth = 0
        $match = StringRegExp($string, "(?im)^\h*#cs\b", 1)
        $start = @extended
        If @error Then ExitLoop
        Do
            $match = StringRegExp($string, "(?im)^\h*#c([se])\b", 1, $offset)
            $offset = @extended
            Select
                Case @error
                    Return False
                Case $match[0] = "e"
                    $depth -= 1
                Case Else
                    $depth += 1
            EndSelect
        Until $depth < 1

        $string = StringLeft($string, $start - 4) & StringRegExpReplace(StringMid($string, $offset), ".*", '', 1)
;~         $string = StringLeft($string, $start-4) & StringMid($string, $offset)
    WEnd
    #endregion remove nested block-comments
    $string = StringRegExpReplace($string & @CRLF, '(?m)^((?:[^''";]*([''"]).*?\2)*[^;]*)\h*;.*$', '\1') ; remove one-line comments (недостаток - не работает если @CR без @LF)
    $string = StringRegExpReplace($string, '\s+\z', '') ; удалить пустое в конце
    Return True
EndFunc   ;==>_stripComments

Func _ArrayUnique2(ByRef $data) ; Удаление дубликатов
    Local $k
    $k = -1
    For $i = 0 To UBound($data) - 1
        If Not IsDeclared($data[$i] & '/') Then
            $k += 1
            $data[$k] = $data[$i]
            Assign($data[$i] & '/', '', 1)
        EndIf
    Next
    If $k = -1 Then Return SetError(1, 0, 0)
    $k += 1
    ReDim $data[$k]
    Return SetError(0, 0, $k)
EndFunc   ;==>_ArrayUnique2

See also: Renaming variables

Edited by AZJIO

Share this post


Link to post
Share on other sites



Nice script, im sure it will be useful in large projects.


ongoing projects:-firestorm: Largescale P2P Social NetworkCompleted Autoit Programs/Scripts: Variable Pickler | Networked Streaming Audio (in pure autoIT) | firenet p2p web messenger | Proxy Checker | Dynamic Execute() Code Generator | P2P UDF | Graph Theory Proof of Concept - Breadth First search

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0