| 1 | --------------------------------------------------------------------------------
|
|---|
| 2 | -- This library contains tools specific to AutoIt.
|
|---|
| 3 | --
|
|---|
| 4 | -- NOTE: Names in parenthesis indicate which tool a function or lines of code
|
|---|
| 5 | -- belong to. The tools are not listed by function name, merely feature name.
|
|---|
| 6 | --
|
|---|
| 7 | -- Current tools:
|
|---|
| 8 | -- UserList - Invoke FunctionList() to display a user list of all functions
|
|---|
| 9 | -- in the active file.
|
|---|
| 10 | --------------------------------------------------------------------------------
|
|---|
| 11 | AutoItTools = EventClass:new(Common)
|
|---|
| 12 |
|
|---|
| 13 | --------------------------------------------------------------------------------
|
|---|
| 14 | -- OnStartup()
|
|---|
| 15 | --
|
|---|
| 16 | -- Initializes variables.
|
|---|
| 17 | --------------------------------------------------------------------------------
|
|---|
| 18 | function AutoItTools:OnStartup()
|
|---|
| 19 | -- The pattern to search for. This pattern is applied across the entire
|
|---|
| 20 | -- document. The empty capture at the beginning returns the position,
|
|---|
| 21 | -- useful for getting the line number.
|
|---|
| 22 | -- NOTE: This will not match a function on the first line of the file
|
|---|
| 23 | -- unless it has whitespace before it.
|
|---|
| 24 | self.Pattern = "()[%s][Ff][Uu][Nn][Cc][%s]+([%w%s_]*%(.-%))"
|
|---|
| 25 |
|
|---|
| 26 | -- The list seperator. (UserList)
|
|---|
| 27 | self.Seperator = ";"
|
|---|
| 28 | self.SeperatorByte = self.Seperator:byte()
|
|---|
| 29 | -- The unique ID identifying our user list. (UserList)
|
|---|
| 30 | self.ID = 12
|
|---|
| 31 | -- Specifies the marker type to use (default: Bookmark).
|
|---|
| 32 | self.Marker = 1
|
|---|
| 33 | -- A table where the keys are the function strings and the values are the
|
|---|
| 34 | -- line where the string is found. (UserList)
|
|---|
| 35 | self.DataTable = { }
|
|---|
| 36 |
|
|---|
| 37 | --Load keywords table used by propercase
|
|---|
| 38 | f = io.open(props['SciteDefaultHome'].."\\api\\au3.api")
|
|---|
| 39 | if f ~= nil then
|
|---|
| 40 | self.ProperWords = f:read('*a')
|
|---|
| 41 | f:close()
|
|---|
| 42 | -- remove the ?x at the end of the lines of each keyword record
|
|---|
| 43 | self.ProperWords = string.gsub(self.ProperWords,"\?%d","")
|
|---|
| 44 | self.l_ProperWords = string.lower(self.ProperWords)
|
|---|
| 45 | else
|
|---|
| 46 | self.ProperWords = ""
|
|---|
| 47 | end
|
|---|
| 48 | -- Check for Beta and set the BETA_AUTOIT= in au3.properties to the correct value
|
|---|
| 49 | f = io.open(props['SciteDefaultHome'].."\\..\\beta\\au3check.dat")
|
|---|
| 50 | if f ~= nil then
|
|---|
| 51 | -- Beta Exists
|
|---|
| 52 | f:close()
|
|---|
| 53 | for cmd = 0, 50, 1 do
|
|---|
| 54 | if props['command.'..cmd..'.beta'] ~= '' then
|
|---|
| 55 | props['command.name.'..cmd..'.$(au3)']=props['command.'..cmd..'.beta']
|
|---|
| 56 | --~ print('beta command.name.'..cmd..'.$(au3)=' .. props['command.name.'..cmd..'.$(au3)'])
|
|---|
| 57 | end
|
|---|
| 58 | end
|
|---|
| 59 |
|
|---|
| 60 | --~ print("Beta exists.")
|
|---|
| 61 | else
|
|---|
| 62 | for cmd = 0, 50, 1 do
|
|---|
| 63 | if props['command.'..cmd..'.beta'] ~= '' then
|
|---|
| 64 | props['command.name.'..cmd..'.$(au3)']=''
|
|---|
| 65 | --~ print('no Beta command.name.'..cmd..'.$(au3)=' .. props['command.name.'..cmd..'.$(au3)'])
|
|---|
| 66 | end
|
|---|
| 67 | end
|
|---|
| 68 | --~ print("Beta missing.")
|
|---|
| 69 | end
|
|---|
| 70 | end -- OnStartup()
|
|---|
| 71 |
|
|---|
| 72 | --------------------------------------------------------------------------------
|
|---|
| 73 | -- FunctionList()
|
|---|
| 74 | --
|
|---|
| 75 | -- Iterates over the document building a list of functions and displaying them
|
|---|
| 76 | -- in a user list.
|
|---|
| 77 | --
|
|---|
| 78 | -- Tool: AutoItTools.FunctionsList $(au3) savebefore:no Ctrl+L List Functions
|
|---|
| 79 | --------------------------------------------------------------------------------
|
|---|
| 80 | function AutoItTools:FunctionsList()
|
|---|
| 81 | -- Local table used to build the list of strings.
|
|---|
| 82 | local data = { }
|
|---|
| 83 | -- Process the entire document at once.
|
|---|
| 84 | local doc = "\n" .. editor:GetText()
|
|---|
| 85 | for pos, str in doc:gmatch(self.Pattern) do
|
|---|
| 86 | -- If we have a multi-line function definition, show it all on one line.
|
|---|
| 87 | str = str:gsub("[\r\n]*", "")
|
|---|
| 88 | -- Insert the string into both tables.
|
|---|
| 89 | table.insert(data, str)
|
|---|
| 90 | self.DataTable[str] = editor:LineFromPosition(pos)
|
|---|
| 91 | end
|
|---|
| 92 | -- Sort the table and build a string out of it.
|
|---|
| 93 | table.sort(data, function(a, b) return string.lower(a) < string.lower(b) end)
|
|---|
| 94 | local list = table.concat(data, self.Seperator)
|
|---|
| 95 | -- Store the seperator, set our new one, show the list and restore the
|
|---|
| 96 | -- original seperator.
|
|---|
| 97 | local old_seperator = editor.AutoCSeparator
|
|---|
| 98 | editor.AutoCSeparator = self.SeperatorByte
|
|---|
| 99 | editor:ScrollCaret()
|
|---|
| 100 | editor:UserListShow(self.ID, list)
|
|---|
| 101 | editor.AutoCSeparator = old_seperator
|
|---|
| 102 | end -- FunctionsList
|
|---|
| 103 |
|
|---|
| 104 | --------------------------------------------------------------------------------
|
|---|
| 105 | -- OnUserListSelection(id, str)
|
|---|
| 106 | --
|
|---|
| 107 | -- Marks the current line and jumps to the line containing the selected
|
|---|
| 108 | -- function.
|
|---|
| 109 | --
|
|---|
| 110 | -- Parameters:
|
|---|
| 111 | -- id - The ID of the event to make sure it is ours.
|
|---|
| 112 | -- str - The selected item.
|
|---|
| 113 | --
|
|---|
| 114 | -- Returns:
|
|---|
| 115 | -- The value true if the event was for us.
|
|---|
| 116 | --------------------------------------------------------------------------------
|
|---|
| 117 | function AutoItTools:OnUserListSelection(id, str)
|
|---|
| 118 | if id == self.ID then
|
|---|
| 119 | -- Look up the line we jump to using the string as the table key.
|
|---|
| 120 | local line = self.DataTable[str]
|
|---|
| 121 | if line then
|
|---|
| 122 | -- Clear our marker and set a new one.
|
|---|
| 123 | editor:MarkerDeleteAll(self.Marker)
|
|---|
| 124 | editor:MarkerAdd(editor:LineFromPosition(editor.CurrentPos), self.Marker)
|
|---|
| 125 | editor:GotoLine(line)
|
|---|
| 126 | editor:EnsureVisible(line)
|
|---|
| 127 | end
|
|---|
| 128 | return true
|
|---|
| 129 | end
|
|---|
| 130 | end -- OnUserListSelection()
|
|---|
| 131 |
|
|---|
| 132 | --------------------------------------------------------------------------------
|
|---|
| 133 | -- InsertRegion()
|
|---|
| 134 | --
|
|---|
| 135 | -- Inserts #Region...#EndRegion around the selected text.
|
|---|
| 136 | --
|
|---|
| 137 | -- Tool: AutoItTools.InsertRegion $(au3) savebefore:no,groupundo:yes Ctrl+Alt+R Insert Region
|
|---|
| 138 | --------------------------------------------------------------------------------
|
|---|
| 139 | function AutoItTools:InsertRegion()
|
|---|
| 140 | local nl = self:NewLineInUse()
|
|---|
| 141 | local word = self:GetWord()
|
|---|
| 142 | local name = word:match("Func ([%w_]*)")
|
|---|
| 143 | if name == nil then
|
|---|
| 144 | name = ""
|
|---|
| 145 | else
|
|---|
| 146 | name = name .. "()"
|
|---|
| 147 | end
|
|---|
| 148 | pos = editor.SelectionStart
|
|---|
| 149 | editor:ReplaceSel("#Region " .. name .. nl .. word .. nl .. "#EndRegion " .. name)
|
|---|
| 150 | editor:SetSel(pos, pos)
|
|---|
| 151 | end -- InsertRegion()
|
|---|
| 152 |
|
|---|
| 153 | --------------------------------------------------------------------------------
|
|---|
| 154 | -- DebugMsgBoxAdd()
|
|---|
| 155 | --
|
|---|
| 156 | -- Add debug MsgBox to the selected text (original by Jos van der Zande).
|
|---|
| 157 | --
|
|---|
| 158 | -- Tool: AutoItTools.DebugMsgBoxAdd $(au3) savebefore:no,groupundo:yes Alt+D Debug: Add MsgBox
|
|---|
| 159 | --------------------------------------------------------------------------------
|
|---|
| 160 | function AutoItTools:DebugMsgBoxAdd()
|
|---|
| 161 | local word = self:GetWord2()
|
|---|
| 162 | if word == "" then
|
|---|
| 163 | print("Cursor not on any text.")
|
|---|
| 164 | return
|
|---|
| 165 | end
|
|---|
| 166 | local word = word:gsub("\r", "") -- remove CR
|
|---|
| 167 | local word = word:gsub("\n", "") -- remove LF
|
|---|
| 168 | local word2 = word:gsub("'", "''") -- replace quote by 2 quotes
|
|---|
| 169 | local line = editor:LineFromPosition(editor.CurrentPos) + 1
|
|---|
| 170 | editor:LineEnd()
|
|---|
| 171 | editor:NewLine()
|
|---|
| 172 | --~ editor:AddText("MsgBox(262144,'debug line ~" .. line .. "' , \'" .. word2 .. "\:' & @CRLF & " .. word .. ") ;### Debug MSGBOX" )
|
|---|
| 173 | local option = tonumber(props['debug.msgbox.option'])
|
|---|
| 174 | if option == 2 then
|
|---|
| 175 | editor:AddText("SetError(@Error, @Extended, MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @LF & \'" .. word2 .. "\' & @LF & @LF & 'Return:' & @LF & " .. word .. " & @LF & @LF & '@Error:' & @LF & @Error & @LF & @LF & '@Extended:' & @lf & @Extended)) ;### Debug MSGBOX" )
|
|---|
| 176 | elseif option == 1 then
|
|---|
| 177 | editor:AddText("SetError(@Error, @Extended, MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @LF & \'" .. word2 .. "\' & @LF & @LF & 'Return:' & @LF & " .. word .. " & @LF & @LF & '@Error:' & @LF & @Error)) ;### Debug MSGBOX" )
|
|---|
| 178 | elseif option == 0 then
|
|---|
| 179 | editor:AddText("SetError(@Error, @Extended, MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @LF & \'" .. word2 .. "\' & @LF & @LF & 'Return:' & @LF & " .. word .. ")) ;### Debug MSGBOX" )
|
|---|
| 180 | elseif option == -1 then
|
|---|
| 181 | editor:AddText("SetError(@Error, @Extended, MsgBox(262144,'debug line ~' & @ScriptLineNumber, \'" .. word2 .. "\:' & @LF & " .. word .. ")) ;### Debug MSGBOX" )
|
|---|
| 182 | end
|
|---|
| 183 | editor:LineDown()
|
|---|
| 184 | editor:Home()
|
|---|
| 185 | end -- DebugMsgBoxAdd()
|
|---|
| 186 |
|
|---|
| 187 | --------------------------------------------------------------------------------
|
|---|
| 188 | -- DebugConsoleWriteAdd()
|
|---|
| 189 | --
|
|---|
| 190 | -- Add debug ConsoleWrite to the selected text (original by Jos van der Zande).
|
|---|
| 191 | --
|
|---|
| 192 | -- Tool: AutoItTools.DebugConsoleWriteAdd $(au3) savebefore:no,groupundo:yes Ctrl+D Debug: Add ConsoleWrite
|
|---|
| 193 | --------------------------------------------------------------------------------
|
|---|
| 194 | function AutoItTools:DebugConsoleWriteAdd()
|
|---|
| 195 | local word = self:GetWord2()
|
|---|
| 196 | if word == "" then
|
|---|
| 197 | print("Cursor not on any text.")
|
|---|
| 198 | return
|
|---|
| 199 | end
|
|---|
| 200 | local word = word:gsub("\r", "") -- replace quote by 2 quotes
|
|---|
| 201 | local word = word:gsub("\n", "") -- replace quote by 2 quotes
|
|---|
| 202 | local word2 = word:gsub("'", "''") -- replace quote by 2 quotes
|
|---|
| 203 | local line = editor:LineFromPosition(editor.CurrentPos) + 1
|
|---|
| 204 | editor:LineEnd()
|
|---|
| 205 | editor:NewLine()
|
|---|
| 206 | --~ editor:AddText("ConsoleWrite('@@ (" .. line .. ") :(' & @min & ':' & @sec & ') " .. word2 .. " = ' & " .. word .. " & @CRLF) ;### Debug Console")
|
|---|
| 207 | local option = tonumber(props['debug.console.option'])
|
|---|
| 208 | if option == 3 then
|
|---|
| 209 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : " .. word2 .. " = ' & " .. word .. " & @CRLF & '>Error code: ' & @Error & ' Extended code: ' & @Extended & ' SystemTime: ' & @HOUR & ':' & @MIN & ':' & @SEC & @CRLF)) ;### Debug Console" )
|
|---|
| 210 | elseif option == 2 then
|
|---|
| 211 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : " .. word2 .. " = ' & " .. word .. " & @CRLF & '>Error code: ' & @Error & ' Extended code: ' & @Extended & @CRLF)) ;### Debug Console" )
|
|---|
| 212 | elseif option == 1 then
|
|---|
| 213 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : " .. word2 .. " = ' & " .. word .. " & @CRLF & '>Error code: ' & @Error & @CRLF)) ;### Debug Console" )
|
|---|
| 214 | elseif option == 0 then
|
|---|
| 215 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : " .. word2 .. " = ' & " .. word .. " & @CRLF)) ;### Debug Console" )
|
|---|
| 216 | elseif option == -1 then
|
|---|
| 217 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ (' & @ScriptLineNumber & ') :(' & @MIN & ':' & @SEC & ') " .. word2 .. " = ' & " .. word .. " & @CRLF)) ;### Debug Console" )
|
|---|
| 218 | elseif option == -2 then
|
|---|
| 219 | -- editor:AddText("SetError(@Error, @Extended, ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') Error: ' & @error & ' Ext: ' & @extended & ' ; " .. word2 .. " = ' & " .. word .. " & @CRLF)) ;### Debug Console" )
|
|---|
| 220 | editor:AddText("SetError(@Error, @Extended, ConsoleWrite(StringFormat('@@ Debug(%4d) Error: %3d Ext: %8d', @ScriptLineNumber, @error ,@extended) & ' ; " .. word2 .. " = ' & " .. word .. " & @CRLF)) ;### Debug Console" )
|
|---|
| 221 | end
|
|---|
| 222 | editor:LineDown()
|
|---|
| 223 | editor:Home()
|
|---|
| 224 | end -- DebugConsoleWriteAdd()
|
|---|
| 225 |
|
|---|
| 226 | --------------------------------------------------------------------------------
|
|---|
| 227 | -- OldCodeMark()
|
|---|
| 228 | --
|
|---|
| 229 | -- Comments out the selected text and names the section "Old Code".
|
|---|
| 230 | --
|
|---|
| 231 | -- Tool: AutoItTools.OldCodeMark $(au3) savebefore:no,groupundo:yes Alt+M Mark Old Code
|
|---|
| 232 | --------------------------------------------------------------------------------
|
|---|
| 233 | function AutoItTools:OldCodeMark()
|
|---|
| 234 | local word = self:GetWord()
|
|---|
| 235 | if word ~= "" then
|
|---|
| 236 | editor:ReplaceSel("#cs Old Code")
|
|---|
| 237 | editor:NewLine()
|
|---|
| 238 | editor:AddText(word)
|
|---|
| 239 | editor:NewLine()
|
|---|
| 240 | editor:AddText("#ce Old Code")
|
|---|
| 241 | end
|
|---|
| 242 | end -- OldCodeMark()
|
|---|
| 243 |
|
|---|
| 244 | --------------------------------------------------------------------------------
|
|---|
| 245 | -- OldCodeGoto()
|
|---|
| 246 | --
|
|---|
| 247 | -- Jumps to the first line of old code in the document.
|
|---|
| 248 | --
|
|---|
| 249 | -- Tool: AutoItTools.OldCodeGoto $(au3) savebefore:no Alt+N Goto Old Code
|
|---|
| 250 | --------------------------------------------------------------------------------
|
|---|
| 251 | function AutoItTools:OldCodeGoto()
|
|---|
| 252 | local doc = editor:GetText()
|
|---|
| 253 | local pos = doc:find("#cs Old Code")
|
|---|
| 254 | if pos then
|
|---|
| 255 | editor:GotoLine(editor:LineFromPosition(pos))
|
|---|
| 256 | else
|
|---|
| 257 | print("No Old Code sections found.")
|
|---|
| 258 | end
|
|---|
| 259 | end -- OldCodeGoto()
|
|---|
| 260 |
|
|---|
| 261 | --------------------------------------------------------------------------------
|
|---|
| 262 | -- CreateFunctionHeader(s, p)
|
|---|
| 263 | --
|
|---|
| 264 | -- Creates a function header for an AutoIt 3 function.
|
|---|
| 265 | --
|
|---|
| 266 | -- Parameters:
|
|---|
| 267 | -- s - The name of a function.
|
|---|
| 268 | -- p - The parameters to the function.
|
|---|
| 269 | --
|
|---|
| 270 | -- Returns:
|
|---|
| 271 | -- A string containing the function header.
|
|---|
| 272 | --------------------------------------------------------------------------------
|
|---|
| 273 | function AutoItTools:CreateFunctionHeader(s, p)
|
|---|
| 274 | -- Change these :)
|
|---|
| 275 | local defAuthor = props['UDFCreator'] -- Initial Author value
|
|---|
| 276 | local defLineMax = 129 -- Max length of line. AutoIt standard is 129.
|
|---|
| 277 | local defSplit = 21 -- Default index for '-' after param.
|
|---|
| 278 |
|
|---|
| 279 | local nl = self:NewLineInUse()
|
|---|
| 280 |
|
|---|
| 281 | local outStart = "FUNCTION"
|
|---|
| 282 | local outName = s
|
|---|
| 283 | local outDesc = ""
|
|---|
| 284 | local outSyntax = ""
|
|---|
| 285 | local outParams = ""
|
|---|
| 286 | local outReturn = "None"
|
|---|
| 287 | local outAuthor = defAuthor
|
|---|
| 288 | local outModify = ""
|
|---|
| 289 | local outRemarks = ""
|
|---|
| 290 | local outRelated = ""
|
|---|
| 291 | local outLink = ""
|
|---|
| 292 | local outExample = "No"
|
|---|
| 293 |
|
|---|
| 294 | local name = s
|
|---|
| 295 | local params = p
|
|---|
| 296 |
|
|---|
| 297 | if name:sub(0, 2) == "__" then
|
|---|
| 298 | outStart = "INTERNAL_USE_ONLY"
|
|---|
| 299 | end
|
|---|
| 300 |
|
|---|
| 301 | outSyntax = name .. "("
|
|---|
| 302 |
|
|---|
| 303 | local paramSynt = ""
|
|---|
| 304 | local iOptionals = 0
|
|---|
| 305 | local fBroken = false
|
|---|
| 306 | local sModifiers = ""
|
|---|
| 307 | if params ~= "" and params ~= nil then
|
|---|
| 308 | for byref, parameter, optional in string.gfind(params, "(%w-%s*%w*)%s*($[%w_]+)%s*[=]?%s*(.-)[,%)]") do
|
|---|
| 309 | if parameter ~= "" and parameter ~= nil then
|
|---|
| 310 | if outParams ~= "" then
|
|---|
| 311 | outParams = outParams .. nl .. ";" .. string.rep(" ", 18)
|
|---|
| 312 | end
|
|---|
| 313 |
|
|---|
| 314 | outParams = outParams .. parameter .. string.rep(" ", defSplit - string.len(parameter)) .. "- "
|
|---|
| 315 |
|
|---|
| 316 | sModifiers = ""
|
|---|
| 317 | if optional ~= "" and optional ~= nil then
|
|---|
| 318 | outParams = outParams .. "[optional] "
|
|---|
| 319 |
|
|---|
| 320 | if paramSynt ~= "" then
|
|---|
| 321 | paramSynt = paramSynt .. "[, "
|
|---|
| 322 | else
|
|---|
| 323 | paramSynt = paramSynt .. "["
|
|---|
| 324 | end
|
|---|
| 325 |
|
|---|
| 326 | iOptionals = iOptionals + 1
|
|---|
| 327 | else
|
|---|
| 328 | byref = string.gsub(byref:lower(), "%s", "")
|
|---|
| 329 | if byref ~= "" then
|
|---|
| 330 | if byref == "byref" then
|
|---|
| 331 | outParams = outParams .. "[in/out] "
|
|---|
| 332 | sModifiers = "Byref "
|
|---|
| 333 | else
|
|---|
| 334 | if byref == "const" then
|
|---|
| 335 | outParams = outParams .. "[const] "
|
|---|
| 336 | sModifiers = "Const "
|
|---|
| 337 | else
|
|---|
| 338 | if byref == "byrefconst" or byref == "constbyref" then
|
|---|
| 339 | outParams = outParams .. "[in/out and const] "
|
|---|
| 340 | sModifiers = "Const Byref "
|
|---|
| 341 | else
|
|---|
| 342 | print("Unrecognised parameter modifiers: '" .. byref .. "'")
|
|---|
| 343 | end
|
|---|
| 344 | end
|
|---|
| 345 | end
|
|---|
| 346 | end
|
|---|
| 347 |
|
|---|
| 348 | if paramSynt ~= "" then
|
|---|
| 349 | paramSynt = paramSynt .. ", "
|
|---|
| 350 | end
|
|---|
| 351 | end
|
|---|
| 352 |
|
|---|
| 353 | if fBroken then
|
|---|
| 354 | if string.len(paramSynt) + string.len(parameter) + iOptionals + 2 + 19 > defLineMax then
|
|---|
| 355 | outSyntax = outSyntax .. paramSynt .. nl .. ";" .. string.rep(" ", 18)
|
|---|
| 356 | paramSynt = ""
|
|---|
| 357 | fBroken = true
|
|---|
| 358 | end
|
|---|
| 359 | else
|
|---|
| 360 | if string.len(outSyntax) + string.len(paramSynt) + string.len(parameter) + iOptionals + 2 + 19 > defLineMax then
|
|---|
| 361 | outSyntax = outSyntax .. paramSynt .. nl .. ";" .. string.rep(" ", 18)
|
|---|
| 362 | paramSynt = ""
|
|---|
| 363 | fBroken = true
|
|---|
| 364 | end
|
|---|
| 365 | end
|
|---|
| 366 | paramSynt = paramSynt .. sModifiers .. parameter
|
|---|
| 367 |
|
|---|
| 368 | if optional ~= "" and optional ~= nil then
|
|---|
| 369 | paramSynt = paramSynt .. " = " .. optional
|
|---|
| 370 | end
|
|---|
| 371 |
|
|---|
| 372 | local paramtype = parameter:sub(2, 2)
|
|---|
| 373 | local isarray = false
|
|---|
| 374 | if paramtype == "a" then
|
|---|
| 375 | paramtype = parameter:sub(3, 3)
|
|---|
| 376 | isarray = true
|
|---|
| 377 | end
|
|---|
| 378 |
|
|---|
| 379 | local sAdd
|
|---|
| 380 | if paramtype == "i" then
|
|---|
| 381 | sAdd = "integer"
|
|---|
| 382 | elseif parameter:sub(2, 3) == "fu" then
|
|---|
| 383 | sAdd = "function (first class object)"
|
|---|
| 384 | elseif parameter:sub(2, 4) == "tag" then
|
|---|
| 385 | sAdd = "structures definition"
|
|---|
| 386 | elseif paramtype == "f" then
|
|---|
| 387 | sAdd = "floating point"
|
|---|
| 388 | elseif paramtype == "b" then
|
|---|
| 389 | sAdd = "boolean"
|
|---|
| 390 | elseif paramtype == "d" then
|
|---|
| 391 | sAdd = "binary variant"
|
|---|
| 392 | elseif paramtype == "n" then
|
|---|
| 393 | sAdd = "general number"
|
|---|
| 394 | elseif paramtype == "s" then
|
|---|
| 395 | sAdd = "string"
|
|---|
| 396 | elseif paramtype == "h" then
|
|---|
| 397 | sAdd = "handle"
|
|---|
| 398 | elseif paramtype == "m" then
|
|---|
| 399 | sAdd = "map"
|
|---|
| 400 | elseif paramtype == "v" then
|
|---|
| 401 | sAdd = "variant"
|
|---|
| 402 | elseif paramtype == "o" then
|
|---|
| 403 | sAdd = "object"
|
|---|
| 404 | elseif paramtype == "id" then
|
|---|
| 405 | sAdd = "AutoIt controlid"
|
|---|
| 406 | elseif paramtype == "p" then
|
|---|
| 407 | sAdd = "pointer"
|
|---|
| 408 | elseif paramtype == "t" then
|
|---|
| 409 | sAdd = "dll struct"
|
|---|
| 410 | else
|
|---|
| 411 | sAdd = "unknown"
|
|---|
| 412 | end
|
|---|
| 413 |
|
|---|
| 414 | if isarray then
|
|---|
| 415 | outParams = outParams .. "an array of " .. sAdd .. "s."
|
|---|
| 416 | else
|
|---|
| 417 | if sAdd == 'object' then
|
|---|
| 418 | outParams = outParams .. "an " .. sAdd .. "."
|
|---|
| 419 | elseif sAdd == 'map' then
|
|---|
| 420 | outParams = outParams .. "a " .. sAdd .. "."
|
|---|
| 421 | elseif sAdd == 'structures definition' then
|
|---|
| 422 | outParams = outParams .. "a " .. sAdd .. "."
|
|---|
| 423 | elseif sAdd == 'function (first class object)' then
|
|---|
| 424 | outParams = outParams .. "" .. sAdd .. "."
|
|---|
| 425 |
|
|---|
| 426 | else
|
|---|
| 427 | if sAdd:sub(1, 1):find("[AEIOUaeiou]") ~= nil then
|
|---|
| 428 | outParams = outParams .. "an " .. sAdd .. " value."
|
|---|
| 429 | else
|
|---|
| 430 | outParams = outParams .. "a " .. sAdd .. " value."
|
|---|
| 431 | end
|
|---|
| 432 | end
|
|---|
| 433 | end
|
|---|
| 434 |
|
|---|
| 435 | if optional ~= "" and optional ~= nil then
|
|---|
| 436 | outParams = outParams .. " Default is " .. optional .. "."
|
|---|
| 437 | end
|
|---|
| 438 | end
|
|---|
| 439 | end
|
|---|
| 440 | else
|
|---|
| 441 | outParams = "None"
|
|---|
| 442 | end
|
|---|
| 443 |
|
|---|
| 444 | outSyntax = outSyntax .. paramSynt .. string.rep("]", iOptionals) .. ")"
|
|---|
| 445 |
|
|---|
| 446 | local res = "; #" .. outStart .. "# " .. string.rep("=", defLineMax - 5 - outStart:len()) .. nl
|
|---|
| 447 | res = res .. "; Name ..........: " .. outName .. nl
|
|---|
| 448 | res = res .. "; Description ...: " .. outDesc .. nl
|
|---|
| 449 | res = res .. "; Syntax ........: " .. outSyntax .. nl
|
|---|
| 450 | res = res .. "; Parameters ....: " .. outParams .. nl
|
|---|
| 451 | res = res .. "; Return values .: " .. outReturn .. nl
|
|---|
| 452 | res = res .. "; Author ........: " .. outAuthor .. nl
|
|---|
| 453 | res = res .. "; Modified ......: " .. outModify .. nl
|
|---|
| 454 | res = res .. "; Remarks .......: " .. outRemarks .. nl
|
|---|
| 455 | res = res .. "; Related .......: " .. outRelated .. nl
|
|---|
| 456 | res = res .. "; Link ..........: " .. outLink .. nl
|
|---|
| 457 | res = res .. "; Example .......: " .. outExample .. nl
|
|---|
| 458 | res = res .. "; " .. string.rep("=", defLineMax - 2) .. nl
|
|---|
| 459 |
|
|---|
| 460 | return res
|
|---|
| 461 | end -- CreateFunctionHeader()
|
|---|
| 462 |
|
|---|
| 463 | --------------------------------------------------------------------------------
|
|---|
| 464 | -- CreateStructureHeader(s, p)
|
|---|
| 465 | --
|
|---|
| 466 | -- Creates a structure header for an AutoIt 3 struct.
|
|---|
| 467 | --
|
|---|
| 468 | -- Parameters:
|
|---|
| 469 | -- s - The name of a structure.
|
|---|
| 470 | -- p - The complete structure definition.
|
|---|
| 471 | --
|
|---|
| 472 | -- Returns:
|
|---|
| 473 | -- A string containing the structure header.
|
|---|
| 474 | --------------------------------------------------------------------------------
|
|---|
| 475 | function AutoItTools:CreateStructureHeader(s, p)
|
|---|
| 476 | local defAuthor = props['UDFCreator'] -- Initial Author value
|
|---|
| 477 |
|
|---|
| 478 | local defLineMax = 129 -- Max length of line. AutoIt standard is 129.
|
|---|
| 479 | local defSplit = 21 -- Default index for '-' after param.
|
|---|
| 480 |
|
|---|
| 481 | local nl = self:NewLineInUse()
|
|---|
| 482 |
|
|---|
| 483 | local outStart = "STRUCTURE"
|
|---|
| 484 | local outName = s
|
|---|
| 485 | local outDesc = ""
|
|---|
| 486 | local outFields = ""
|
|---|
| 487 | local outAuthor = defAuthor
|
|---|
| 488 | local outRemarks = ""
|
|---|
| 489 | local outRelated = ""
|
|---|
| 490 |
|
|---|
| 491 | local str
|
|---|
| 492 | if p ~= "" and p ~= nil then
|
|---|
| 493 | p = p:sub(p:find("[\"']"), -1)
|
|---|
| 494 |
|
|---|
| 495 | for sect in string.gfind(p, "%s*(.-)%s*[;\"']") do
|
|---|
| 496 |
|
|---|
| 497 | if sect:match("[Aa][Ll][Ii][Gg][Nn]%s+%d+") then
|
|---|
| 498 | -- Align statement: Ignore
|
|---|
| 499 | else
|
|---|
| 500 | str = sect:match("^%s*&%s*$([%w_]+)%s&%s*$")
|
|---|
| 501 | if str ~= nil then
|
|---|
| 502 | -- Substruct
|
|---|
| 503 |
|
|---|
| 504 | if outFields ~= "" then
|
|---|
| 505 | outFields = outFields .. nl .. ";" .. string.rep(" ", 18)
|
|---|
| 506 | end
|
|---|
| 507 |
|
|---|
| 508 | outFields = outFields .. str .. string.rep(" ", defSplit - string.len(str)) .. "- A $" .. str .. " structure."
|
|---|
| 509 | else
|
|---|
| 510 | if sect == nil or sect == "" or sect:upper() == "STRUCT" or sect:upper() == "ENDSTRUCT" then
|
|---|
| 511 | -- Substruct or empty: Ignore
|
|---|
| 512 | else
|
|---|
| 513 | local datatype, name = sect:match("^(.-)%s+(.-)$")
|
|---|
| 514 |
|
|---|
| 515 | if outFields ~= "" then
|
|---|
| 516 | outFields = outFields .. nl .. ";" .. string.rep(" ", 18)
|
|---|
| 517 | end
|
|---|
| 518 |
|
|---|
| 519 | outFields = outFields .. name .. string.rep(" ", defSplit - string.len(name)) .. "- "
|
|---|
| 520 |
|
|---|
| 521 | if datatype:sub(1, 1):find("[AEIOUaeiou]") ~= nil then
|
|---|
| 522 | outFields = outFields .. "An "
|
|---|
| 523 | else
|
|---|
| 524 | outFields = outFields .. "A "
|
|---|
| 525 | end
|
|---|
| 526 |
|
|---|
| 527 | outFields = outFields .. datatype .. " value."
|
|---|
| 528 | end
|
|---|
| 529 | end
|
|---|
| 530 | end
|
|---|
| 531 |
|
|---|
| 532 | end
|
|---|
| 533 | end
|
|---|
| 534 |
|
|---|
| 535 | local res = "; #" .. outStart .. "# " .. string.rep("=", defLineMax - 5 - outStart:len()) .. nl
|
|---|
| 536 | res = res .. "; Name ..........: " .. outName .. nl
|
|---|
| 537 | res = res .. "; Description ...: " .. outDesc .. nl
|
|---|
| 538 | res = res .. "; Fields ........: " .. outFields .. nl
|
|---|
| 539 | res = res .. "; Author ........: " .. outAuthor .. nl
|
|---|
| 540 | res = res .. "; Remarks .......: " .. outRemarks .. nl
|
|---|
| 541 | res = res .. "; Related .......: " .. outRelated .. nl
|
|---|
| 542 | res = res .. "; Link ..........: " .. nl
|
|---|
| 543 | res = res .. "; " .. string.rep("=", defLineMax - 2) .. nl
|
|---|
| 544 | return res
|
|---|
| 545 | end -- CreateStructureHeader
|
|---|
| 546 |
|
|---|
| 547 | --------------------------------------------------------------------------------
|
|---|
| 548 | -- InsertFunctionHeader()
|
|---|
| 549 | --
|
|---|
| 550 | -- Generates a function header and inserts it into the document.
|
|---|
| 551 | --
|
|---|
| 552 | -- Tool: AutoItTools.InsertFunctionHeader $(au3) savebefore:no,groupundo:yes Alt+U Insert Function Header
|
|---|
| 553 | --------------------------------------------------------------------------------
|
|---|
| 554 | function AutoItTools:InsertFunctionHeader()
|
|---|
| 555 | local line, pos = editor:GetCurLine()
|
|---|
| 556 | local pos = editor.CurrentPos - pos
|
|---|
| 557 | local lineNum = editor:LineFromPosition(pos)
|
|---|
| 558 | --~ local from, to, name = line:find("[Ff][Uu][Nn][Cc][%s]*([%w%s_]*)")
|
|---|
| 559 | local from, to, name = line:find("[Ff][Uu][Nn][Cc]%s+([%w%s_]*)")
|
|---|
| 560 | local struct = false
|
|---|
| 561 |
|
|---|
| 562 | if to == nil then
|
|---|
| 563 | from, to, name = line:find("[Gg][Ll][Oo][Bb][Aa][Ll]%s+[Cc][Oo][Nn][Ss][Tt]%s+($[%w_]+)")
|
|---|
| 564 | struct = true
|
|---|
| 565 | if to == nil then
|
|---|
| 566 | print("Function or struct definition not found, unable to insert header.")
|
|---|
| 567 | return
|
|---|
| 568 | end
|
|---|
| 569 | end
|
|---|
| 570 |
|
|---|
| 571 | -- remove comments from the line
|
|---|
| 572 | from, to = line:find(";")
|
|---|
| 573 | while from ~= nil do
|
|---|
| 574 | -- print(pos+from .. " type:" .. editor.StyleAt[pos+from])
|
|---|
| 575 | if editor.StyleAt[pos+from] == SCE_AU3_COMMENT then
|
|---|
| 576 | line = string.sub (line, 1 , from-1) -- remove comment
|
|---|
| 577 | from = nil -- exit loop
|
|---|
| 578 | else
|
|---|
| 579 | from, to = line:find(";",from+1) -- find next ; as this one is not a comment
|
|---|
| 580 | end
|
|---|
| 581 | end
|
|---|
| 582 | -- print(" line:" .. line)
|
|---|
| 583 | local pfrom, pto = line:find("%(") -- check for opening parenthesis
|
|---|
| 584 | if struct then
|
|---|
| 585 | pfrom, pto = line:find("[\"']")
|
|---|
| 586 | end
|
|---|
| 587 |
|
|---|
| 588 | if pto ~= nil then
|
|---|
| 589 | local i = 0
|
|---|
| 590 | local tmp
|
|---|
| 591 | while line:find("%s+_%s*$") do -- found a line continuation
|
|---|
| 592 | line = line:gsub("%s+_%s*$", "") -- remove it
|
|---|
| 593 | i = i + 1
|
|---|
| 594 | pos = editor:PositionFromLine(lineNum+i) -- set new position
|
|---|
| 595 | tmp = editor:GetLine(lineNum+i)
|
|---|
| 596 | -- remove comments from the line
|
|---|
| 597 | from, to = tmp:find(";")
|
|---|
| 598 | while from ~= nil do
|
|---|
| 599 | -- print(pos+from .. " type:" .. editor.StyleAt[pos+from])
|
|---|
| 600 | if editor.StyleAt[pos+from] == SCE_AU3_COMMENT then
|
|---|
| 601 | tmp = string.sub (tmp, 1 , from-1) -- remove comment
|
|---|
| 602 | from = nil -- exit loop
|
|---|
| 603 | else
|
|---|
| 604 | from, to = tmp:find(";",from+1) -- find next ; as this one is not a comment
|
|---|
| 605 | end
|
|---|
| 606 | end
|
|---|
| 607 | tmp = tmp:gsub("^%s*", "") -- remove leading white space
|
|---|
| 608 | line = line .. tmp
|
|---|
| 609 | end
|
|---|
| 610 | editor:Home()
|
|---|
| 611 | line = line:gsub("[\r\n]", "") -- remove line breaks
|
|---|
| 612 | line = line:gsub("[\"']%s*&%s*[\"']", "") -- remove string joins
|
|---|
| 613 | if name:sub(1, 1) == "$" then
|
|---|
| 614 | editor:AddText(self:CreateStructureHeader(name, line))
|
|---|
| 615 | else
|
|---|
| 616 | editor:AddText(self:CreateFunctionHeader(name, line))
|
|---|
| 617 | end
|
|---|
| 618 | else
|
|---|
| 619 | print("Argument list not found, unable to insert header.")
|
|---|
| 620 | end
|
|---|
| 621 | end -- InsertFunctionHeader()
|
|---|
| 622 | --------------------------------------------------------------------------------
|
|---|
| 623 | -- ConsoleWritePattern(with_comment)
|
|---|
| 624 | --
|
|---|
| 625 | -- Returns the pattern used to find DebugConsoleWrite statements. This must be
|
|---|
| 626 | -- a function so NewLineInUse() can be called on the correct document.
|
|---|
| 627 | --
|
|---|
| 628 | -- Paramters:
|
|---|
| 629 | -- with_comment - If true, returns the pattern with a leading comment.
|
|---|
| 630 | --
|
|---|
| 631 | -- Returns:
|
|---|
| 632 | -- The pattern used to find DebugConsoleWrite statements.
|
|---|
| 633 | --------------------------------------------------------------------------------
|
|---|
| 634 | function AutoItTools:ConsoleWritePattern(with_comment)
|
|---|
| 635 | local nl = self:NewLineInUse()
|
|---|
| 636 | if with_comment then
|
|---|
| 637 | return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
|
|---|
| 638 | else
|
|---|
| 639 | return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
|
|---|
| 640 | end
|
|---|
| 641 | end -- ConsoleWritePattern()
|
|---|
| 642 |
|
|---|
| 643 | --------------------------------------------------------------------------------
|
|---|
| 644 | -- MsgBoxPattern(with_comment)
|
|---|
| 645 | --
|
|---|
| 646 | -- Returns the pattern used to find DebugMsgBox statements. This must be
|
|---|
| 647 | -- a function so NewLineInUse() can be called on the correct document.
|
|---|
| 648 | --
|
|---|
| 649 | -- Paramters:
|
|---|
| 650 | -- with_comment - If true, returns the pattern with a leading comment.
|
|---|
| 651 | --
|
|---|
| 652 | -- Returns:
|
|---|
| 653 | -- The pattern used to find DebugMsgBox statements.
|
|---|
| 654 | --------------------------------------------------------------------------------
|
|---|
| 655 | function AutoItTools:MsgBoxPattern(with_comment)
|
|---|
| 656 | local nl = self:NewLineInUse()
|
|---|
| 657 | if with_comment then
|
|---|
| 658 | return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
|
|---|
| 659 | else
|
|---|
| 660 | return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
|
|---|
| 661 | end
|
|---|
| 662 | end -- MsgBoxPattern()
|
|---|
| 663 |
|
|---|
| 664 | --------------------------------------------------------------------------------
|
|---|
| 665 | -- DebugComment()
|
|---|
| 666 | --
|
|---|
| 667 | -- Comment all Debug lines.
|
|---|
| 668 | --
|
|---|
| 669 | -- Tool: AutoItTools.DebugComment $(au3) savebefore:no,groupundo:yes Ctrl+Shift+D Debug: Comment all lines
|
|---|
| 670 | --------------------------------------------------------------------------------
|
|---|
| 671 | function AutoItTools:DebugComment()
|
|---|
| 672 | -- Callback function.
|
|---|
| 673 | local function pat_match(m1)
|
|---|
| 674 | return self:NewLineInUse() .. ";\t" .. m1
|
|---|
| 675 | end
|
|---|
| 676 | -- Perform replacement.
|
|---|
| 677 | self:ReplaceDocByPattern(self:ConsoleWritePattern(), pat_match)
|
|---|
| 678 | self:ReplaceDocByPattern(self:MsgBoxPattern(), pat_match)
|
|---|
| 679 | end -- DebugComment()
|
|---|
| 680 |
|
|---|
| 681 | --------------------------------------------------------------------------------
|
|---|
| 682 | -- DebugUncomment()
|
|---|
| 683 | --
|
|---|
| 684 | -- Uncomment all Debug lines.
|
|---|
| 685 | --
|
|---|
| 686 | -- Tool: AutoItTools.DebugUncomment $(au3) savebefore:no,groupundo:yes Ctrl+Alt+D Debug: Uncomment all lines
|
|---|
| 687 | --------------------------------------------------------------------------------
|
|---|
| 688 | function AutoItTools:DebugUncomment()
|
|---|
| 689 | -- Callback function.
|
|---|
| 690 | local function pat_match(m1)
|
|---|
| 691 | return self:NewLineInUse() .. m1
|
|---|
| 692 | end
|
|---|
| 693 | -- Perform replacement.
|
|---|
| 694 | self:ReplaceDocByPattern(self:ConsoleWritePattern(true), pat_match)
|
|---|
| 695 | self:ReplaceDocByPattern(self:MsgBoxPattern(true), pat_match)
|
|---|
| 696 | end -- DebugUncomment()
|
|---|
| 697 |
|
|---|
| 698 | --------------------------------------------------------------------------------
|
|---|
| 699 | -- DebugRemove()
|
|---|
| 700 | --
|
|---|
| 701 | -- Remove all Debug MsgBox/Console lines.
|
|---|
| 702 | --
|
|---|
| 703 | -- Tool: AutoItTools.DebugRemove $(au3) savebefore:no,groupundo:yes Ctrl+Alt+Shift+D Debug: Remove all lines
|
|---|
| 704 | --------------------------------------------------------------------------------
|
|---|
| 705 | function AutoItTools:DebugRemove()
|
|---|
| 706 | -- Callback function.
|
|---|
| 707 | local function pat_match()
|
|---|
| 708 | return ""
|
|---|
| 709 | end
|
|---|
| 710 | -- Remove any commented functions first
|
|---|
| 711 | self:DebugUncomment()
|
|---|
| 712 | -- Perform replacement.
|
|---|
| 713 | self:ReplaceDocByPattern(self:ConsoleWritePattern(), pat_match)
|
|---|
| 714 | self:ReplaceDocByPattern(self:MsgBoxPattern(), pat_match)
|
|---|
| 715 | end -- DebugRemove()
|
|---|
| 716 | --------------------------------------------------------------------------------
|
|---|
| 717 | -- FunctionTracePattern(with_comment)
|
|---|
| 718 | --
|
|---|
| 719 | -- Returns the pattern used to find FunctionTrace statements. This must be
|
|---|
| 720 | -- a function so NewLineInUse() can be called on the correct document.
|
|---|
| 721 | --
|
|---|
| 722 | -- Paramters:
|
|---|
| 723 | -- with_comment - If true, returns the pattern with a leading comment.
|
|---|
| 724 | --
|
|---|
| 725 | -- Returns:
|
|---|
| 726 | -- The pattern used to find FunctionTrace statements.
|
|---|
| 727 | --------------------------------------------------------------------------------
|
|---|
| 728 | function AutoItTools:FunctionTracePattern(with_comment)
|
|---|
| 729 | local nl = self:NewLineInUse()
|
|---|
| 730 | if with_comment then
|
|---|
| 731 | return nl .. "[%s]*;[%s]*(ConsoleWrite%([^" .. nl .. "]-%)[%s]*;### Function Trace[^" .. nl .. "]?)"
|
|---|
| 732 | else
|
|---|
| 733 | return nl .. "[%s]*(ConsoleWrite%([^" .. nl .. "]-%)[%s]*;### Function Trace[^" .. nl .. "]?)"
|
|---|
| 734 | end
|
|---|
| 735 | end -- FunctionTracePattern()
|
|---|
| 736 |
|
|---|
| 737 | --------------------------------------------------------------------------------
|
|---|
| 738 | -- FunctionTraceAdd()
|
|---|
| 739 | --
|
|---|
| 740 | -- Inserts a ConsoleWrite() for each function.
|
|---|
| 741 | --
|
|---|
| 742 | -- Tool: AutoItTools.FunctionTraceAdd $(au3) savebefore:no,groupundo:yes Ctrl+T Debug: Add Trace Functions
|
|---|
| 743 | --------------------------------------------------------------------------------
|
|---|
| 744 | function AutoItTools:FunctionTraceAdd()
|
|---|
| 745 | -- Pattern to match
|
|---|
| 746 | --~ local sPattern = "()([Ff][Uu][Nn][Cc][%s]*([%w_]*)%(.-%))([^\r\n]*)"
|
|---|
| 747 | local sPattern = "()([Ff][Uu][Nn][Cc]%s+([%w_]*)%(.-%))([^\r\n]*)"
|
|---|
| 748 |
|
|---|
| 749 | -- Used as a counter in pat_match to offset the line numbers
|
|---|
| 750 | local i = 0
|
|---|
| 751 | -- Callback function. If the comment "FunctionTraceSkip" is found after
|
|---|
| 752 | -- the closing ), then that function will not get a trace statement added.
|
|---|
| 753 | local function pat_match(m1, m2, m3, m4)
|
|---|
| 754 | if editor.StyleAt[m1] == SCE_AU3_COMMENT or
|
|---|
| 755 | editor.StyleAt[m1] == SCE_AU3_COMMENTBLOCK or
|
|---|
| 756 | m4:find(";[%s]*[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn][Tt][Rr][Aa][Cc][Ee][Ss][Kk][Ii][Pp]") then
|
|---|
| 757 | return m2 .. m4
|
|---|
| 758 | end
|
|---|
| 759 | i = i + 1
|
|---|
| 760 | return m2 .. m4 .. self:NewLineInUse() .. "\tConsoleWrite('@@ (" .. editor:LineFromPosition(m1)+i .. ") :(' & @MIN & ':' & @SEC & ') " .. m3 .. "()' & @CR) ;### Function Trace"
|
|---|
| 761 | end
|
|---|
| 762 | -- Remove any previous traces so we don't get duplicates
|
|---|
| 763 | self:FunctionTraceRemove()
|
|---|
| 764 | -- Perform replacement
|
|---|
| 765 | self:ReplaceDocByPattern(sPattern, pat_match)
|
|---|
| 766 | end -- FunctionTraceAdd()
|
|---|
| 767 | --------------------------------------------------------------------------------
|
|---|
| 768 | -- FunctionTraceRemove()
|
|---|
| 769 | --
|
|---|
| 770 | -- Remove all Function Trace statements.
|
|---|
| 771 | --
|
|---|
| 772 | -- Tool: AutoItTools.FunctionTraceRemove $(au3) savebefore:no,groupundo:yes Ctrl+Alt+Shift+T Debug: Remove Trace Functions
|
|---|
| 773 | --------------------------------------------------------------------------------
|
|---|
| 774 | function AutoItTools:FunctionTraceRemove()
|
|---|
| 775 | -- Callback function.
|
|---|
| 776 | local function pat_match()
|
|---|
| 777 | return ""
|
|---|
| 778 | end
|
|---|
| 779 | -- Remove any commented functions first
|
|---|
| 780 | self:FunctionTraceUncomment()
|
|---|
| 781 | -- Perform replacement
|
|---|
| 782 | self:ReplaceDocByPattern(self:FunctionTracePattern(), pat_match)
|
|---|
| 783 | end -- FunctionTraceRemove()
|
|---|
| 784 |
|
|---|
| 785 | --------------------------------------------------------------------------------
|
|---|
| 786 | -- FunctionTraceComment()
|
|---|
| 787 | --
|
|---|
| 788 | -- Comment all Function Trace statements.
|
|---|
| 789 | --
|
|---|
| 790 | -- Tool: AutoItTools.FunctionTraceComment $(au3) savebefore:no,groupundo:yes Ctrl+Shift+T Debug: Comment Trace Functions
|
|---|
| 791 | --------------------------------------------------------------------------------
|
|---|
| 792 | function AutoItTools:FunctionTraceComment()
|
|---|
| 793 | -- Callback function.
|
|---|
| 794 | local function pat_match(m1)
|
|---|
| 795 | return self:NewLineInUse() .. ";\t" .. m1
|
|---|
| 796 | end
|
|---|
| 797 | -- Perform replacement
|
|---|
| 798 | self:ReplaceDocByPattern(self:FunctionTracePattern(), pat_match)
|
|---|
| 799 | end -- FunctionTraceComment()
|
|---|
| 800 |
|
|---|
| 801 | --------------------------------------------------------------------------------
|
|---|
| 802 | -- FunctionTraceUncomment()
|
|---|
| 803 | --
|
|---|
| 804 | -- Uncomment all Function Trace statements.
|
|---|
| 805 | -- Tool: AutoItTools.FunctionTraceUncomment $(au3) savebefore:no,groupundo:yes Ctrl+Alt+T Debug: Uncomment Trace Functions
|
|---|
| 806 | --------------------------------------------------------------------------------
|
|---|
| 807 | function AutoItTools:FunctionTraceUncomment()
|
|---|
| 808 | -- Callback function.
|
|---|
| 809 | local function pat_match(m1)
|
|---|
| 810 | return self:NewLineInUse() .. "\t" .. m1
|
|---|
| 811 | end
|
|---|
| 812 | -- Perform replacement
|
|---|
| 813 | self:ReplaceDocByPattern(self:FunctionTracePattern(true), pat_match)
|
|---|
| 814 | end -- FunctionTraceUncomment()
|
|---|
| 815 |
|
|---|
| 816 | --------------------------------------------------------------------------------
|
|---|
| 817 | -- GetWord2()
|
|---|
| 818 | --
|
|---|
| 819 | -- Alternate GetWord() implementation specific to AutoIt. If the caret is on a
|
|---|
| 820 | -- function, the entire function call is returned.
|
|---|
| 821 | --
|
|---|
| 822 | -- If a word can be found, it is returned, otherwise an empty string.
|
|---|
| 823 | --------------------------------------------------------------------------------
|
|---|
| 824 | function AutoItTools:GetWord2()
|
|---|
| 825 | local word = editor:GetSelText()
|
|---|
| 826 | if word == "" then
|
|---|
| 827 | -- When on an ( or space, go to the start of the previous word.
|
|---|
| 828 | if editor.CharAt[editor.CurrentPos] == 40 or editor.CharAt[editor.CurrentPos] == 32 then
|
|---|
| 829 | editor:WordLeft()
|
|---|
| 830 | end
|
|---|
| 831 | -- Cache the style as it's used numerous times.
|
|---|
| 832 | local style = editor.StyleAt[editor.CurrentPos]
|
|---|
| 833 | -- The start and end of the text range.
|
|---|
| 834 | local from = editor:WordStartPosition(editor.CurrentPos)
|
|---|
| 835 | local to = editor:WordEndPosition(editor.CurrentPos)
|
|---|
| 836 | -- Use a variable to shorten the for loop code.
|
|---|
| 837 | local line = editor:LineFromPosition(editor.CurrentPos)
|
|---|
| 838 | -- Caret is on a function.
|
|---|
| 839 | if style == SCE_AU3_FUNCTION or style == SCE_AU3_DEFAULT or style == SCE_AU3_UDF then
|
|---|
| 840 | -- A counter of the number of opening brackets encountered.
|
|---|
| 841 | local brackets = 0
|
|---|
| 842 | -- A flag set to true if an opening bracket is encountered.
|
|---|
| 843 | local found = false
|
|---|
| 844 | -- Iterate the line looking for the end of the function call.
|
|---|
| 845 | for i = editor.CurrentPos, editor.LineEndPosition[line] do
|
|---|
| 846 | -- Make sure we don't count brackets in strings.
|
|---|
| 847 | if editor.StyleAt[i] ~= SCE_AU3_STRING then
|
|---|
| 848 | -- Found an opening bracket, increment counter and set flag.
|
|---|
| 849 | if editor.CharAt[i] == 40 then
|
|---|
| 850 | brackets = brackets + 1
|
|---|
| 851 | found = true
|
|---|
| 852 | end
|
|---|
| 853 | -- Found a closing bracket, decrement counter.
|
|---|
| 854 | if editor.CharAt[i] == 41 then
|
|---|
| 855 | brackets = brackets - 1
|
|---|
| 856 | end
|
|---|
| 857 | end
|
|---|
| 858 | -- We found a bracket and we found the end, set to and break.
|
|---|
| 859 | if found and brackets == 0 then
|
|---|
| 860 | to = i + 1
|
|---|
| 861 | break
|
|---|
| 862 | end
|
|---|
| 863 | end
|
|---|
| 864 | -- If we didn't find any brackets, just return the simple GetWord().
|
|---|
| 865 | if not found then
|
|---|
| 866 | return self:GetWord()
|
|---|
| 867 | end
|
|---|
| 868 | -- Caret is in a string.
|
|---|
| 869 | elseif style == SCE_AU3_STRING then
|
|---|
| 870 | -- Find the start of the string. To do this, we iterate backwards
|
|---|
| 871 | -- to the indentation.
|
|---|
| 872 | for i = editor.CurrentPos, editor.LineIndentPosition[line] - 1, -1 do
|
|---|
| 873 | if editor.StyleAt[i] ~= SCE_AU3_STRING then
|
|---|
| 874 | -- We have to add 1 or we'll pick up the non-string
|
|---|
| 875 | -- character as well.
|
|---|
| 876 | from = i + 1
|
|---|
| 877 | break
|
|---|
| 878 | end
|
|---|
| 879 | end
|
|---|
| 880 | -- Find the end of the string. To do this, we iterate forwards to
|
|---|
| 881 | -- the end of the string.
|
|---|
| 882 | for i = editor.CurrentPos, editor.LineEndPosition[line] do
|
|---|
| 883 | if editor.StyleAt[i] ~= SCE_AU3_STRING then
|
|---|
| 884 | to = i
|
|---|
| 885 | break
|
|---|
| 886 | end
|
|---|
| 887 | end
|
|---|
| 888 | end
|
|---|
| 889 | -- Get the text range.
|
|---|
| 890 | word = editor:textrange(from, to)
|
|---|
| 891 | end
|
|---|
| 892 | return word
|
|---|
| 893 | end -- GetWord2()
|
|---|
| 894 |
|
|---|
| 895 | --------------------------------------------------------------------------------
|
|---|
| 896 | -- ValidateFunctions()
|
|---|
| 897 | --
|
|---|
| 898 | -- Validates a function has the proper comment header and #Region section.
|
|---|
| 899 | --
|
|---|
| 900 | -- Tool: AutoItTools.ValidateFunctions $(au3) savebefore:no Ctrl+Alt+V Validate Functions
|
|---|
| 901 | --------------------------------------------------------------------------------
|
|---|
| 902 | function AutoItTools:ValidateFunctions()
|
|---|
| 903 | local doc = "\n" .. editor:GetText()
|
|---|
| 904 |
|
|---|
| 905 | for pos, str in doc:gmatch(self.Pattern) do
|
|---|
| 906 | -- We need to concatenate multi-line function definitions into a single
|
|---|
| 907 | -- line.
|
|---|
| 908 | str = str:gsub("_%s-" .. self:NewLineInUse() .. "%s*", "")
|
|---|
| 909 | local pattern = "; " .. str .. self:NewLineInUse() .. ";" .. self:NewLineInUse()
|
|---|
| 910 | local func = str:match("^(.-)[%(%s]")
|
|---|
| 911 | local intro = "@@ (" .. editor:LineFromPosition(pos) + 1 .. ") :(" .. os.date("%I:%S") .. ") "
|
|---|
| 912 | -- Validate function header
|
|---|
| 913 | if not doc:find(pattern, 1, true) then
|
|---|
| 914 | self:DebugPrint("Pattern\r\n|" .. pattern .. "|")
|
|---|
| 915 | print(intro .. "Function header not present or out of sync for: " .. func)
|
|---|
| 916 | end
|
|---|
| 917 | -- Validate #Region
|
|---|
| 918 | if not doc:find("#Region " .. func .. "()", 1, true) then
|
|---|
| 919 | print(intro .. "#Region missing for: " .. func)
|
|---|
| 920 | end
|
|---|
| 921 | -- Validate EndFunc
|
|---|
| 922 | if not doc:find("[Ee][Nn][Dd][Ff][Uu][Nn][Cc]\t; " .. func .. "()") then
|
|---|
| 923 | print(intro .. "Incorrect EndFunc comment for: " .. func .. "\tExpected: EndFunc\t; " .. func .. "()")
|
|---|
| 924 | end
|
|---|
| 925 | end
|
|---|
| 926 | print("Validate Functions for " .. props["FileNameExt"] .. " is complete.")
|
|---|
| 927 | end -- ValidateFunctions()
|
|---|
| 928 |
|
|---|
| 929 | --------------------------------------------------------------------------------
|
|---|
| 930 | -- ExportLibrary()
|
|---|
| 931 | --
|
|---|
| 932 | -- Creates an exports section in an AutoIt file containing comments describing
|
|---|
| 933 | -- the functions in the file.
|
|---|
| 934 | --
|
|---|
| 935 | -- Tool: AutoItTools.ExportLibrary $(au3) savebefore:no,groupundo:yes Ctrl+Alt+E Export Library
|
|---|
| 936 | --------------------------------------------------------------------------------
|
|---|
| 937 | function AutoItTools:ExportLibrary()
|
|---|
| 938 | -- These are constants used throughout.
|
|---|
| 939 | local region_text = "#Region Members Exported"
|
|---|
| 940 | local comment_start = "#cs Exported Functions"
|
|---|
| 941 | local comment_end = "#ce Exported Functions"
|
|---|
| 942 | local nl = self:NewLineInUse()
|
|---|
| 943 |
|
|---|
| 944 | -- We work over the entire document.
|
|---|
| 945 | local doc = editor:GetText()
|
|---|
| 946 | if not doc:find(region_text, 1, true) then
|
|---|
| 947 | print("Error: Unable to find \"" .. region_text .. "\" in the library, no export list created.")
|
|---|
| 948 | else
|
|---|
| 949 | local from, to, found = false
|
|---|
| 950 | if not doc:find(comment_start, 1, true) then
|
|---|
| 951 | print("Warning: Unable to find \"" .. comment_start .. "\" in the library, there may be multiple export lists.")
|
|---|
| 952 | from = doc:match(region_text .. nl .. "()")
|
|---|
| 953 | to = from
|
|---|
| 954 | else
|
|---|
| 955 | from = doc:match(comment_start .. nl .. "()")
|
|---|
| 956 | to = doc:match("()" .. comment_end)
|
|---|
| 957 | found = true
|
|---|
| 958 | end
|
|---|
| 959 | -- This should never happen due to the checks above.
|
|---|
| 960 | if not from or not to then
|
|---|
| 961 | print("Error, unable to determine where to add the export list.")
|
|---|
| 962 | else
|
|---|
| 963 | -- Store the list in this variable.
|
|---|
| 964 | local text = ""
|
|---|
| 965 | -- We only build the list for functions we can find in the code.
|
|---|
| 966 | -- Orphaned comments will not be found.
|
|---|
| 967 | for pos, str in doc:gmatch(self.Pattern) do
|
|---|
| 968 | -- Pull the name out of string so we can build a pattern.
|
|---|
| 969 | local name = str:match("^(.-)[%(%s]")
|
|---|
| 970 | -- First check that the name doesn't start with __ which means
|
|---|
| 971 | -- it's private.
|
|---|
| 972 | if not str:find("^__") then
|
|---|
| 973 | -- Build the pattern. It's a bit complicated to keep it
|
|---|
| 974 | -- from running over lines it shoudn't.
|
|---|
| 975 | local pattern = ";%s+(" .. name .. "%s*%([^" .. nl .. "]+)" .. nl .. ";%s+;(.-);%s+Parameters"
|
|---|
| 976 | -- Get the two parts.
|
|---|
| 977 | local func, desc = doc:match(pattern)
|
|---|
| 978 | -- Ensure they are valid.
|
|---|
| 979 | if func and desc then
|
|---|
| 980 | -- Clean up the text, put on a single line, remove trailing spaces.
|
|---|
| 981 | func = func:gsub("%s*$", "") -- Trailing spaces
|
|---|
| 982 | desc = desc:gsub("%s*;%s*", " ") -- Multiple lines
|
|---|
| 983 | desc = desc:gsub("^%s*", "") -- Leading spaces
|
|---|
| 984 | desc = desc:gsub("%s*$", "") -- Trailing spaces
|
|---|
| 985 | -- Concatenate the formatted text.
|
|---|
| 986 | text = text .. func .. " - " .. desc .. nl
|
|---|
| 987 | end
|
|---|
| 988 | end
|
|---|
| 989 | end
|
|---|
| 990 | -- We have to offset our indices because SciTE is 0-based while Lua
|
|---|
| 991 | -- strings are 1-based.
|
|---|
| 992 | editor:SetSel(from - 1, to -1)
|
|---|
| 993 | -- If the exports section already exists, we are replacing it.
|
|---|
| 994 | if found then
|
|---|
| 995 | editor:ReplaceSel(text)
|
|---|
| 996 | -- Otherwise, we have to insert the exports section.
|
|---|
| 997 | else
|
|---|
| 998 | editor:ReplaceSel(comment_start .. nl .. text .. comment_end .. nl)
|
|---|
| 999 | end
|
|---|
| 1000 | print("Exports list created. ")
|
|---|
| 1001 | end
|
|---|
| 1002 | end
|
|---|
| 1003 | end -- ExportLibrary()
|
|---|
| 1004 |
|
|---|
| 1005 | -- ***************** Extra's **************************************************************************************************************************************
|
|---|
| 1006 | --------------------------------------------------------------------------------
|
|---|
| 1007 | -- OnChar(c)
|
|---|
| 1008 | --
|
|---|
| 1009 | -- Controls propercase Keywords.Functions and Abbreviation expansion
|
|---|
| 1010 | --
|
|---|
| 1011 | -- Parameters:
|
|---|
| 1012 | -- c - The character typed.
|
|---|
| 1013 | --------------------------------------------------------------------------------
|
|---|
| 1014 | function AutoItTools:OnChar(c)
|
|---|
| 1015 | --~ print("Char:" .. c)
|
|---|
| 1016 | if editor.Lexer == SCLEX_AU3 then
|
|---|
| 1017 | -- set propercase
|
|---|
| 1018 | if props['proper.case'] == '1' and string.find(c, "[ =(]") then
|
|---|
| 1019 | self:ProperCase(c)
|
|---|
| 1020 | end
|
|---|
| 1021 | -- abbreviations logic will auto expand on space when SCE_AU3_EXPAND. written by Jos van der Zande (JdeB)
|
|---|
| 1022 | local ls = editor.StyleAt[editor.CurrentPos-2]
|
|---|
| 1023 | if ls == SCE_AU3_EXPAND and c == " " then
|
|---|
| 1024 | self:Abbreviations()
|
|---|
| 1025 | end
|
|---|
| 1026 | end
|
|---|
| 1027 | end -- OnChar()
|
|---|
| 1028 |
|
|---|
| 1029 |
|
|---|
| 1030 | --------------------------------------------------------------------------------
|
|---|
| 1031 | -- TracePattern(with_comment)
|
|---|
| 1032 | --
|
|---|
| 1033 | -- Returns the pattern used to find FunctionTrace statements. This must be
|
|---|
| 1034 | -- a function so NewLineInUse() can be called on the correct document.
|
|---|
| 1035 | --
|
|---|
| 1036 | -- Paramters:
|
|---|
| 1037 | -- with_comment - If true, returns the pattern with a leading comment.
|
|---|
| 1038 | --
|
|---|
| 1039 | -- Returns:
|
|---|
| 1040 | -- The pattern used to find FunctionTrace statements.
|
|---|
| 1041 | --------------------------------------------------------------------------------
|
|---|
| 1042 | function AutoItTools:TracePattern(with_comment)
|
|---|
| 1043 | local nl = self:NewLineInUse()
|
|---|
| 1044 | if with_comment then
|
|---|
| 1045 | return nl .. "[%s]*;[%s]*(ConsoleWrite%([^" .. nl .. "]-%) ;### Trace Console[^" .. nl .. "]?)"
|
|---|
| 1046 | else
|
|---|
| 1047 | return nl .. "[%s]*(ConsoleWrite%([^" .. nl .. "]-%) ;### Trace Console[^" .. nl .. "]?)"
|
|---|
| 1048 | end
|
|---|
| 1049 | end -- TracePattern()
|
|---|
| 1050 |
|
|---|
| 1051 | --------------------------------------------------------------------------------
|
|---|
| 1052 | -- TraceAdd()
|
|---|
| 1053 | --
|
|---|
| 1054 | -- Inserts a ConsoleWrite() for each function.
|
|---|
| 1055 | --
|
|---|
| 1056 | -- Tool: AutoItTools.FunctionTraceAdd $(au3) 2 Ctrl+T Debug: Add Trace Functions
|
|---|
| 1057 | --------------------------------------------------------------------------------
|
|---|
| 1058 | function AutoItTools:TraceAdd()
|
|---|
| 1059 | editor:BeginUndoAction()
|
|---|
| 1060 | local sels = editor.SelectionStart
|
|---|
| 1061 | local sele = editor.SelectionEnd
|
|---|
| 1062 | -- when nothing is selected then Whole script
|
|---|
| 1063 | if sels==sele then
|
|---|
| 1064 | AutoItTools:FunctionTraceRemove() -- Remove any previous traces so we don't get duplicates
|
|---|
| 1065 | sels = 0
|
|---|
| 1066 | sele = editor.Length
|
|---|
| 1067 | end
|
|---|
| 1068 | local FirstLine = editor:LineFromPosition(sels)
|
|---|
| 1069 | local LastLine = editor:LineFromPosition(sele)
|
|---|
| 1070 | local CurrentLine = FirstLine
|
|---|
| 1071 | editor:GotoLine(FirstLine)
|
|---|
| 1072 | PrevLineCont = 0
|
|---|
| 1073 | while (CurrentLine <= LastLine) do
|
|---|
| 1074 | local LineCode = editor:GetLine(editor:LineFromPosition(editor.CurrentPos))
|
|---|
| 1075 | local LineCodeprev = editor:GetLine(editor:LineFromPosition(editor.CurrentPos)-1)
|
|---|
| 1076 | -- Avoid adding a line ontop on the first line in the editor.Anchor
|
|---|
| 1077 | if CurrentLine == 0 then
|
|---|
| 1078 | LineCode = ""
|
|---|
| 1079 | LineCodeprev = ""
|
|---|
| 1080 | end
|
|---|
| 1081 | -- fill LineCode with "" when nul to avoid function errors
|
|---|
| 1082 | if LineCode == nul then LineCode = "" end
|
|---|
| 1083 | -- Skip the Select and Switch statements since the trow an error with AU3Check
|
|---|
| 1084 | place = string.find(LineCodeprev, "%#*[Ss][Ee][Ll][Ee][Cc][Tt]" )
|
|---|
| 1085 | if place then LineCode = "" end
|
|---|
| 1086 | place = string.find(LineCodeprev, "%#*[Ss][Ww][Ii][Tt][Cc][Hh]" )
|
|---|
| 1087 | if place then LineCode = "" end
|
|---|
| 1088 | -- Skip the debug consolewrite lines
|
|---|
| 1089 | place = string.find(LineCode, "ConsoleWrite%('@@" )
|
|---|
| 1090 | if place then LineCode = "" end
|
|---|
| 1091 | -- Skip the line contains test for @error else it could break logic
|
|---|
| 1092 | place = string.find(LineCode, "@[Ee][Rr][Rr][Oo][Rr]" )
|
|---|
| 1093 | if place then LineCode = "" end
|
|---|
| 1094 | -- Remove CRLF
|
|---|
| 1095 | LineCode = string.gsub(LineCode,"\r\n","")
|
|---|
| 1096 | -- Only go WordRight when its not already on a Keyword and LineCode not Empty
|
|---|
| 1097 | if editor.StyleAt[editor.CurrentPos] ~= SCE_AU3_KEYWORD and LineCode ~= "" then
|
|---|
| 1098 | editor:WordRight()
|
|---|
| 1099 | end
|
|---|
| 1100 | ls = editor.StyleAt[editor.CurrentPos]
|
|---|
| 1101 | --_ALERT("ls:" .. ls .. " line:|" .. LineCode .. "|")
|
|---|
| 1102 | if LineCode ~= "" and ls ~= SCE_AU3_COMMENTBLOCK and ls ~= SCE_AU3_COMMENT and ls ~= SCE_AU3_STRING and ls ~= SCE_AU3_PREPROCESSOR and ls ~= SCE_AU3_SPECIAL then
|
|---|
| 1103 | editor:LineEnd()
|
|---|
| 1104 | editor:CharLeft()
|
|---|
| 1105 | -- check for continuation lines since that would create a syntax error
|
|---|
| 1106 | if editor.CharAt[editor.CurrentPos] == 95 and editor.StyleAt[editor.CurrentPos] ~= SCE_AU3_COMMENT then
|
|---|
| 1107 | CurLineCont = 1
|
|---|
| 1108 | else
|
|---|
| 1109 | CurLineCont = 0
|
|---|
| 1110 | end
|
|---|
| 1111 | if LineCode ~= "" and PrevLineCont == 0 then
|
|---|
| 1112 | LineCode = string.gsub(LineCode,"'","''")
|
|---|
| 1113 | cl = editor:LineFromPosition(editor.CurrentPos) +2
|
|---|
| 1114 | editor:Home()
|
|---|
| 1115 | --- mhz's proposal
|
|---|
| 1116 | local option = tonumber(props['debug.trace.option'])
|
|---|
| 1117 | if option == 3 then
|
|---|
| 1118 | editor:AddText("ConsoleWrite('>Error code: ' & @error & ' Extended code: ' & @extended & ' SystemTime: ' & @hour & ':' & @min & ':' & @sec & @CRLF & @CRLF & '@@ Trace(" .. cl .. ") : " .. LineCode .. "' & @CRLF) ;### Trace Console\r\n" )
|
|---|
| 1119 | elseif option == 2 then
|
|---|
| 1120 | editor:AddText("ConsoleWrite('>Error code: ' & @error & ' Extended code: ' & @extended & @CRLF & @CRLF & '@@ Trace(" .. cl .. ") : " .. LineCode .. "' & @CRLF) ;### Trace Console\r\n" )
|
|---|
| 1121 | elseif option == 1 then
|
|---|
| 1122 | editor:AddText("ConsoleWrite('>Error code: ' & @error & @CRLF & @CRLF & '@@ Trace(" .. cl .. ") : " .. LineCode .. "' & @CRLF) ;### Trace Console\r\n" )
|
|---|
| 1123 | elseif option == 0 then
|
|---|
| 1124 | editor:AddText("ConsoleWrite('@@ Trace(" .. cl .. ") : " .. LineCode .. "' & @CRLF) ;### Trace Console\r\n" )
|
|---|
| 1125 | elseif option == -1 then
|
|---|
| 1126 | editor:AddText("ConsoleWrite('@@ (" .. cl .. ") : ***Trace :" .. LineCode .. "' & @CRLF) ;### Trace Console\r\n" )
|
|---|
| 1127 | end
|
|---|
| 1128 | editor:LineDown()
|
|---|
| 1129 | editor:Home()
|
|---|
| 1130 | else
|
|---|
| 1131 | -- If continuation line then just move down
|
|---|
| 1132 | editor:LineDown()
|
|---|
| 1133 | editor:Home()
|
|---|
| 1134 | end
|
|---|
| 1135 | PrevLineCont = CurLineCont
|
|---|
| 1136 | CurrentLine = CurrentLine + 1
|
|---|
| 1137 | else
|
|---|
| 1138 | -- just move down on comment and empty lines
|
|---|
| 1139 | editor:LineDown()
|
|---|
| 1140 | editor:Home()
|
|---|
| 1141 | CurrentLine = CurrentLine + 1
|
|---|
| 1142 | end
|
|---|
| 1143 | end
|
|---|
| 1144 | editor:EndUndoAction()
|
|---|
| 1145 | end -- TraceAdd()
|
|---|
| 1146 |
|
|---|
| 1147 | --------------------------------------------------------------------------------
|
|---|
| 1148 | -- TraceRemove()
|
|---|
| 1149 | --
|
|---|
| 1150 | -- Remove all Trace statements.
|
|---|
| 1151 | --
|
|---|
| 1152 | -- Tool: AutoItTools.TraceRemove $(au3) 1 * Debug: Remove Trace Functions
|
|---|
| 1153 | --------------------------------------------------------------------------------
|
|---|
| 1154 | function AutoItTools:TraceRemove()
|
|---|
| 1155 | -- Callback function.
|
|---|
| 1156 | local function pat_match()
|
|---|
| 1157 | return ""
|
|---|
| 1158 | end
|
|---|
| 1159 | editor:BeginUndoAction()
|
|---|
| 1160 | -- Remove any commented functions first
|
|---|
| 1161 | self:TraceUncomment()
|
|---|
| 1162 | -- Perform replacement
|
|---|
| 1163 | self:ReplaceDocByPattern(self:TracePattern(), pat_match)
|
|---|
| 1164 | editor:EndUndoAction()
|
|---|
| 1165 | end -- TraceRemove()
|
|---|
| 1166 |
|
|---|
| 1167 | --------------------------------------------------------------------------------
|
|---|
| 1168 | -- TraceComment()
|
|---|
| 1169 | --
|
|---|
| 1170 | -- Comment all Function Trace statements.
|
|---|
| 1171 | --
|
|---|
| 1172 | -- Tool: AutoItTools.TraceComment $(au3) 1 * Debug: Comment Trace Functions
|
|---|
| 1173 | --------------------------------------------------------------------------------
|
|---|
| 1174 | function AutoItTools:TraceComment()
|
|---|
| 1175 | -- Callback function.
|
|---|
| 1176 | local function pat_match(m1)
|
|---|
| 1177 | return self:NewLineInUse() .. ";\t" .. m1
|
|---|
| 1178 | end
|
|---|
| 1179 | editor:BeginUndoAction()
|
|---|
| 1180 | -- Perform replacement
|
|---|
| 1181 | self:ReplaceDocByPattern(self:TracePattern(), pat_match)
|
|---|
| 1182 | editor:EndUndoAction()
|
|---|
| 1183 | end -- TraceComment()
|
|---|
| 1184 |
|
|---|
| 1185 | --------------------------------------------------------------------------------
|
|---|
| 1186 | -- TraceUncomment()
|
|---|
| 1187 | --
|
|---|
| 1188 | -- Uncomment all Function Trace statements.
|
|---|
| 1189 | -- Tool: AutoItTools.TraceUncomment $(au3) 1 * Debug: Uncomment Trace Functions
|
|---|
| 1190 | --------------------------------------------------------------------------------
|
|---|
| 1191 | function AutoItTools:TraceUncomment()
|
|---|
| 1192 | -- Callback function.
|
|---|
| 1193 | local function pat_match(m1)
|
|---|
| 1194 | --return self:NewLineInUse() .. "\t" .. m1
|
|---|
| 1195 | return self:NewLineInUse() .. "" .. m1
|
|---|
| 1196 | end
|
|---|
| 1197 | editor:BeginUndoAction()
|
|---|
| 1198 | -- Perform replacement
|
|---|
| 1199 | self:ReplaceDocByPattern(self:TracePattern(true), pat_match)
|
|---|
| 1200 | editor:EndUndoAction()
|
|---|
| 1201 | end -- TraceUncomment()
|
|---|
| 1202 |
|
|---|
| 1203 |
|
|---|
| 1204 | --------------------------------------------------------------------------------
|
|---|
| 1205 | -- AllComment()
|
|---|
| 1206 | --
|
|---|
| 1207 | -- Comment all Debug and Trace statements.
|
|---|
| 1208 | -- Tool: AutoItTools.AllComment $(au3) 2 Alt+Ctrl+D Debug: Comment ALL lines
|
|---|
| 1209 | --------------------------------------------------------------------------------
|
|---|
| 1210 | function AutoItTools:AllComment()
|
|---|
| 1211 | self:TraceComment()
|
|---|
| 1212 | self:FunctionTraceComment()
|
|---|
| 1213 | self:DebugComment()
|
|---|
| 1214 | end -- TraceComment()
|
|---|
| 1215 |
|
|---|
| 1216 | --------------------------------------------------------------------------------
|
|---|
| 1217 | -- AllUncomment()
|
|---|
| 1218 | --
|
|---|
| 1219 | -- Uncomment all Debug and Trace statements.
|
|---|
| 1220 | -- Tool: AutoItTools.AllUncomment $(au3) 2 Alt+Ctrl+D Debug: UnComment ALL lines
|
|---|
| 1221 | --------------------------------------------------------------------------------
|
|---|
| 1222 | function AutoItTools:AllUncomment()
|
|---|
| 1223 | self:TraceUncomment()
|
|---|
| 1224 | self:FunctionTraceUncomment()
|
|---|
| 1225 | self:DebugUncomment()
|
|---|
| 1226 | end -- TraceUncomment()
|
|---|
| 1227 |
|
|---|
| 1228 | --------------------------------------------------------------------------------
|
|---|
| 1229 | -- AllTraceRemove()
|
|---|
| 1230 | --
|
|---|
| 1231 | -- Remove all Trace statements.
|
|---|
| 1232 | -- Tool: AutoItTools.AllTraceRemove $(au3) 2 Alt+Ctrl+D Debug: UnComment ALL lines
|
|---|
| 1233 | --------------------------------------------------------------------------------
|
|---|
| 1234 | function AutoItTools:AllTraceRemove()
|
|---|
| 1235 | self:TraceRemove()
|
|---|
| 1236 | self:FunctionTraceRemove()
|
|---|
| 1237 | end -- AllTraceRemove()
|
|---|
| 1238 |
|
|---|
| 1239 | --------------------------------------------------------------------------------
|
|---|
| 1240 | -- OpenInclude(version)
|
|---|
| 1241 | --
|
|---|
| 1242 | -- Open the #Include file from your script.
|
|---|
| 1243 | --
|
|---|
| 1244 | -- Tool: AutoItTools.OpenInclude $(au3) 2 Alt+I Open Include
|
|---|
| 1245 | --------------------------------------------------------------------------------
|
|---|
| 1246 | function AutoItTools:OpenInclude(version)
|
|---|
| 1247 | local IncFile, Filename
|
|---|
| 1248 | -- currentline text
|
|---|
| 1249 | local CurrentLine = editor:GetLine(editor:LineFromPosition(editor.CurrentPos))
|
|---|
| 1250 | -- Exclude #include-once
|
|---|
| 1251 | if CurrentLine == nil then
|
|---|
| 1252 | print("Not on #include line.")
|
|---|
| 1253 | return true
|
|---|
| 1254 | end
|
|---|
| 1255 | if string.find(CurrentLine, "%#[Ii][Nn][Cc][Ll][Uu][Dd][Ee][-][Oo][Nn][Cc][Ee]" ) then
|
|---|
| 1256 | return true
|
|---|
| 1257 | end
|
|---|
| 1258 | -- find #include
|
|---|
| 1259 | local place = string.find(CurrentLine, "%#[Ii][Nn][Cc][Ll][Uu][Dd][Ee]" )
|
|---|
| 1260 | -- strip every thing after opening bracket when found
|
|---|
| 1261 | if place then
|
|---|
| 1262 | IncFile = string.sub(CurrentLine,place + 8)
|
|---|
| 1263 | IncFile = string.gsub(IncFile,"\t", " ") -- replace Tabs with space
|
|---|
| 1264 | IncFile = string.gsub(IncFile,"\r","") -- strip CR characters
|
|---|
| 1265 | IncFile = string.gsub(IncFile,"\n","") -- strip LF characters
|
|---|
| 1266 | IncFile = string.gsub(IncFile, "^%s*(.-)%s*$", "%1") -- strip leading and trailing whitespace characters
|
|---|
| 1267 | else
|
|---|
| 1268 | print("Not on #include line.")
|
|---|
| 1269 | return true
|
|---|
| 1270 | end
|
|---|
| 1271 | --
|
|---|
| 1272 | if version ~= "beta" then
|
|---|
| 1273 | version = ""
|
|---|
| 1274 | end
|
|---|
| 1275 | --
|
|---|
| 1276 | IncFile = string.gsub(IncFile,";(.*)","")
|
|---|
| 1277 | -- get list of directories to check
|
|---|
| 1278 | local directories = AutoItGotoDefinition:GetDirectories(version)
|
|---|
| 1279 | local start, stop, step, found
|
|---|
| 1280 | if string.find(IncFile, "<" ) then
|
|---|
| 1281 | IncFile = string.gsub(IncFile,"\<","")
|
|---|
| 1282 | IncFile = string.gsub(IncFile,"\>","")
|
|---|
| 1283 | start = 1
|
|---|
| 1284 | stop = #directories
|
|---|
| 1285 | step = 1
|
|---|
| 1286 | else -- Else it is a include file in the script dir
|
|---|
| 1287 | IncFile = string.gsub(IncFile,"\"","")
|
|---|
| 1288 | IncFile = string.gsub(IncFile,"'","")
|
|---|
| 1289 | start = #directories
|
|---|
| 1290 | stop = 1
|
|---|
| 1291 | step = -1
|
|---|
| 1292 | end
|
|---|
| 1293 | -- loop through the defined directories
|
|---|
| 1294 | found = false
|
|---|
| 1295 | for i = start, stop, step do
|
|---|
| 1296 | Filename = directories[i] .. IncFile
|
|---|
| 1297 | self:DebugPrint("Checking: " .. Filename)
|
|---|
| 1298 | if self:FileExists(Filename) then
|
|---|
| 1299 | -- If we found the include file so open it
|
|---|
| 1300 | print("Opened: " .. Filename)
|
|---|
| 1301 | AutoItGotoDefinition:ShowFunction("", Filename)
|
|---|
| 1302 | found = true
|
|---|
| 1303 | break
|
|---|
| 1304 | end
|
|---|
| 1305 | end
|
|---|
| 1306 | if not found then
|
|---|
| 1307 | print("Couldn't locate include file: " .. IncFile)
|
|---|
| 1308 | end
|
|---|
| 1309 | end
|
|---|
| 1310 |
|
|---|
| 1311 | --------------------------------------------------------------------------------
|
|---|
| 1312 | -- OpenInclude(version)
|
|---|
| 1313 | --
|
|---|
| 1314 | -- Open the #Include file from your script.
|
|---|
| 1315 | --
|
|---|
| 1316 | -- Tool: AutoItTools.OpenInclude $(au3) 2 Alt+Shift+I Open Beta Include
|
|---|
| 1317 | --------------------------------------------------------------------------------
|
|---|
| 1318 | function AutoItTools:OpenBetaInclude()
|
|---|
| 1319 | self:OpenInclude("beta")
|
|---|
| 1320 | end
|
|---|
| 1321 |
|
|---|
| 1322 | --------------------------------------------------------------------------------
|
|---|
| 1323 | -- OnBeforeSave(filename)
|
|---|
| 1324 | --
|
|---|
| 1325 | -- keep the number of backups as defined by backup.files = ? by Jos van der Zande (JdeB)
|
|---|
| 1326 | --
|
|---|
| 1327 | -- AutoItTools.OnBeforeSave $(au3) 2 Alt+Shift+I Open Beta Include
|
|---|
| 1328 | --------------------------------------------------------------------------------
|
|---|
| 1329 | function AutoItTools:OnBeforeSave(filename)
|
|---|
| 1330 | local sbck = tonumber(props['backup.files'])
|
|---|
| 1331 | -- backup specified and bigger than 0 ?
|
|---|
| 1332 | if sbck == nil or sbck == 0 then
|
|---|
| 1333 | return false
|
|---|
| 1334 | end
|
|---|
| 1335 | local nbck = 1
|
|---|
| 1336 | local bfil1 = ""
|
|---|
| 1337 | if sbck > 1 then
|
|---|
| 1338 | bfil1 = ".1"
|
|---|
| 1339 | end
|
|---|
| 1340 | -- check first file backup file format without number and rename it to *.1.bak
|
|---|
| 1341 | if sbck > 1 and io.open (filename.. "." .. ".bak", "r") == nil and io.open (filename.. "." .. ".1.bak", "r") == nil then
|
|---|
| 1342 | os.rename (filename .. ".bak", filename .. ".1.bak")
|
|---|
| 1343 | end
|
|---|
| 1344 | -- rename all files to +1
|
|---|
| 1345 | while (sbck > nbck ) do
|
|---|
| 1346 | local fn1 = sbck-nbck
|
|---|
| 1347 | local fn2 = sbck-nbck+1
|
|---|
| 1348 | os.remove (filename.. "." .. fn2 .. ".bak")
|
|---|
| 1349 | os.rename (filename .. "." .. fn1 .. ".bak", filename .. "." .. fn2 .. ".bak")
|
|---|
| 1350 | nbck = nbck + 1
|
|---|
| 1351 | end
|
|---|
| 1352 | -- rename original to .1.bak or .bak depending on number of backups
|
|---|
| 1353 | os.remove (filename.. bfil1 .. ".bak")
|
|---|
| 1354 | os.rename (filename, filename .. bfil1 .. ".bak")
|
|---|
| 1355 | return false
|
|---|
| 1356 | end
|
|---|
| 1357 |
|
|---|
| 1358 | --------------------------------------------------------------------------------
|
|---|
| 1359 | -- AutoItTools:ProperCase(c)
|
|---|
| 1360 | --
|
|---|
| 1361 | -- Function which will Proper case keywords/functions as defined in au3.api.
|
|---|
| 1362 | --------------------------------------------------------------------------------
|
|---|
| 1363 | function AutoItTools:ProperCase(c)
|
|---|
| 1364 | local repword = ""
|
|---|
| 1365 | -- get word infront of cursor
|
|---|
| 1366 | local from = editor:WordStartPosition(editor.CurrentPos-1)
|
|---|
| 1367 | local to = editor:WordEndPosition(from)
|
|---|
| 1368 | local word = editor:textrange(from, to)
|
|---|
| 1369 | style = editor.StyleAt[from]
|
|---|
| 1370 | if (style == SCE_AU3_DEFAULT) or (style == SCE_AU3_FUNCTION) or (style == SCE_AU3_KEYWORD) or (style == SCE_AU3_MACRO) then
|
|---|
| 1371 | word= string.gsub(word,"%s","") -- strip whitespace characters
|
|---|
| 1372 | word= string.gsub(word,"%s","") -- strip whitespace characters
|
|---|
| 1373 | --print("Word:" .. word .. "|")
|
|---|
| 1374 | if word == nil or string.len(word) < 2 then return true end
|
|---|
| 1375 | --print("Word:" .. word .. "| Style:" .. style)
|
|---|
| 1376 | if self.ProperWords ~= nil and self.ProperWords ~= "" then
|
|---|
| 1377 | local rep_start = string.find("\n" .. self.l_ProperWords .. "\n", "\n" .. string.lower(word) .. "\n")
|
|---|
| 1378 | if rep_start == nil then
|
|---|
| 1379 | rep_start = string.find("\n" .. self.l_ProperWords .. "\n","\n" .. string.lower(word) .. " ")
|
|---|
| 1380 | end
|
|---|
| 1381 | if rep_start ~= nil and rep_start ~= 0 then
|
|---|
| 1382 | rep_start = rep_start
|
|---|
| 1383 | repword = string.sub(self.ProperWords .. "\n",rep_start,rep_start + string.len(word) -1)
|
|---|
| 1384 | else
|
|---|
| 1385 | return true
|
|---|
| 1386 | end
|
|---|
| 1387 | end
|
|---|
| 1388 | -- if found process it
|
|---|
| 1389 | repword = string.gsub(repword,"%s","")
|
|---|
| 1390 | repword = string.gsub(repword,"\n","")
|
|---|
| 1391 | if repword ~= nil and repword ~= word and repword ~= "" then
|
|---|
| 1392 | local savepos = editor.CurrentPos
|
|---|
| 1393 | editor:remove(from, to)
|
|---|
| 1394 | editor:insert(from, repword)
|
|---|
| 1395 | editor:GotoPos(savepos)
|
|---|
| 1396 | end
|
|---|
| 1397 | end
|
|---|
| 1398 | return true
|
|---|
| 1399 | end
|
|---|
| 1400 |
|
|---|
| 1401 |
|
|---|
| 1402 | --------------------------------------------------------------------------------
|
|---|
| 1403 | -- AutoItTools:Abbreviations()
|
|---|
| 1404 | --
|
|---|
| 1405 | -- Expand abbreviations by Jos van der Zande (JdeB)
|
|---|
| 1406 | --------------------------------------------------------------------------------
|
|---|
| 1407 | --
|
|---|
| 1408 | function AutoItTools:Abbreviations()
|
|---|
| 1409 | editor:DeleteBack()
|
|---|
| 1410 | scite.MenuCommand(IDM_ABBREV)
|
|---|
| 1411 | end
|
|---|