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 |
---|