- Offizieller Beitrag
Hi,
Ich habe mal ein kleines Skript geschrieben, das aus der Funktionsdeklaration der aktuellen Zeile einen Header in kleinerem Umfang erstellt.
Dabei werden die Parameter einzeln aufgelistet und evtl. Vorbelegungen als "(Default: Wert)" angegeben.
EDIT:
Nach 10 Jahren habe ich das Skript nochmal etwas aufgefrischt. Es ist jetzt auch für Lua-Skripte nutzbar.
Muster
Funktions Deklarationszeile:
Eingefügt wird darüber:
; #FUNCTION# =======================================================================================
; Name ..........: RandomString
; Description ...:
; Parameter(s)...: $_sType [optional] (Default: '[')
; ....[optional].: $_iLow (Default: 2)
; ....[optional].: $_iHigh (Default: 16)
; Return values .: Success
; ...............: Failure
; Author ........: USER_NAME aus ..\SciTE\properties\au3.properties Wert:UDFCreator
; Remarks .......:
; ==================================================================================================
Alles anzeigen
• In der au3.properties den Usernamen eintragen
• Die Datei HeaderFromCurrFunc.lua abspeichern
• In der SciTEUser.properties einen neuen Eintrag mit Shortcut zum Aufruf der Funktion anlegen (Nummer und Shortcut bei Bedarf anpassen).
# 37 Funktionsheader
command.37.*=dofile "DEIN_PFAD/HeaderFromCurrFunc.lua"
command.name.37.*=Funktionsheader aktuelle Funktion
command.mode.37.*=subsystem:lua,savebefore:yes
command.is.filter.37.*=1
command.shortcut.37.*=Ctrl+Shift+H
Einfach den Cursor in die Zeile mit der Funktionsdeklaration setzen, geht die Deklaration über mehrere Zeilen, dann in die erste Zeile der Deklaration. Mit dem Shortcut wird der Header erstellt und eingefügt.
HeaderFromCurrFunc
-- TIME_STAMP 2022-03-21 16:14:43 v 0.4
-- coding:utf-8
local FunctionHeader = {}
FunctionHeader.SelectExt = function(self)
local ext = props['FileExt']:lower()
if ext == 'au3' then
self:AU3()
elseif ext == 'lua' then
self:LUA()
else
print('!> There is no header function for "*.'..ext..'"!')
end
end
FunctionHeader.AU3 = function(self)
local caret = editor.CurrentPos
local line = editor:LineFromPosition(caret)
local textline = editor:GetLine(line)
local text = ''
-- line has continuation mark ?
while true do
text = text .. textline
if not textline:find('%s_[\r\n]-') then break end
line = line +1
textline = editor:GetLine(line)
end
-- remove continuation mark & line break, shorten many %s to one
text = text:gsub('%s_[\r\n]-', ' '):gsub('%s+', ' ')
-- extract name and params
local fname, param = text:match('([%w_]+)%s-(%b())')
if fname == nil then print('!> No function declaration in this line!') return end
param = param:sub(2,-2)
local tTemp, tParam, len = {}, {}, 7 -- {{$var,default-value,Const/ByRef}}, min var-len=7
if param ~= '' then
for m in param:gmatch('%s*([^,]+)') do table.insert(tTemp, m) end
local var, defval
for i=1, #tTemp do
if tTemp[i]:find('^[Cc][Oo][Nn][Ss][Tt]') then
var = tTemp[i]:match('(%$[%w_]+)')
if tTemp[i]:find('%s[Bb][Yy][Rr][Ee][Ff]') then
table.insert(tParam, {var, nil, 'Const ByRef'})
else
table.insert(tParam, {var, nil, 'Const'})
end
elseif tTemp[i]:find('^[Bb][Yy][Rr][Ee][Ff]') then
var = tTemp[i]:match('(%$[%w_]+)')
table.insert(tParam, {var, nil, 'ByRef'})
elseif tTemp[i]:find('%$[%w_]+%s*=%s*') then
var, defval = tTemp[i]:match('^(%$[%w_]+)%s*=%s*(.+)')
table.insert(tParam, {var, defval})
else
var = tTemp[i]:match('^(%$[%w_]+)')
table.insert(tParam, {var})
end
if var:len() > len then len = var:len() end
end
end
local n, sHeader, sIntro, sDots, sOpt, sAdd, sSpace = "\r\n", "", "", "; ...............: ", "; ....[optional].: ", "", ""
sHeader = sHeader .. "; #FUNCTION# " .. string.rep("=", 87) .. n
sHeader = sHeader .. "; Name ..........: " .. fname .. n
sHeader = sHeader .. "; Description ...: " .. n
sHeader = sHeader .. "; Parameter(s)...: "
if #tParam > 0 then
sSpace = (" "):rep(len +2 -tParam[1][1]:len())
if tParam[1][2] ~= nil then sAdd = "[optional] (Default: ".. tParam[1][2] ..")" end
if tParam[1][3] ~= nil then sAdd = "(".. tParam[1][3] ..")" end
sHeader = sHeader .. tParam[1][1] .. sSpace .. sAdd
end
if #tParam > 1 then
sHeader = sHeader .. n
for i=2, #tParam do
sAdd, sIntro, sSpace = "", sDots, (" "):rep(len +2 -tParam[i][1]:len())
if tParam[i][2] ~= nil then sAdd, sIntro = "(Default: ".. tParam[i][2] ..")", sOpt end
if tParam[i][3] ~= nil then sAdd = "(".. tParam[i][3] ..")" end
sHeader = sHeader .. sIntro .. tParam[i][1] .. sSpace .. sAdd .. n
end
else
sHeader = sHeader .. n
end
sHeader = sHeader .. "; Return values .: " .. "Success " .. n
sHeader = sHeader .. "; ...............: " .. "Failure " .. n
sHeader = sHeader .. "; Author ........: " .. props['UDFCreator'] .. n
sHeader = sHeader .. "; Remarks .......: " .. n
sHeader = sHeader .. "; " .. string.rep("=", 98) .. n
local posIns = editor:PositionFromLine(editor:LineFromPosition(caret))
editor:InsertText(posIns, sHeader)
end
FunctionHeader.LUA = function(self)
local caret = editor.CurrentPos
local line = editor:LineFromPosition(caret)
local home = editor:PositionFromLine(line)
local text = editor:GetLine(line)
if text == nil then print('!> No function declaration in this line!') return end
if not text:find('function') then print('!> No function declaration in this line!') return end
-- match "local function fname(param)"
local p, fname, param = text:match('()local function ([%w_]+)%s-(%b())')
-- match "function fname(param)"
if fname == nil then
p, fname, param = text:match('()function ([%w_]+)%s-(%b())')
end
-- match "local fname = function(param)"
if fname == nil then
p, fname, param = text:match('()local ([%w_]+)%s-=%s-function(%b())')
end
-- match "table.fname = function()"
if fname == nil then
p, fname, param = text:match('()([%w_]+%.[%w_]+)%s-=%s-function(%b())')
end
-- match "fname = function(param)"
if fname == nil then
p, fname, param = text:match('()([%w_]+)%s-=%s-function(%b())')
end
param = param:sub(2,-2)
local tParam = {} -- {var}
if param ~= '' then
for m in param:gmatch('%s*([^,]+)') do
m = m:match('%s*([^%s]+)%s*')
table.insert(tParam, m)
end
end
local n, sHeader, sDots, sIndent= "\n", "", ".............: ", ""
if p > 1 then sIndent = (' '):rep(p-1) end
sHeader = sHeader .. sIndent .. "--[[ #FUNCTION# " .. n
sHeader = sHeader .. sIndent .. " Name ........: " .. fname .. n
sHeader = sHeader .. sIndent .. " Description .: " .. n
sHeader = sHeader .. sIndent .. " Parameter(s).: "
if #tParam > 0 then
sHeader = sHeader .. tParam[1]
end
if #tParam > 1 then
sHeader = sHeader .. n
for i=2, #tParam do
sHeader = sHeader .. sDots .. tParam[i] .. n
end
else
sHeader = sHeader .. n
end
sHeader = sHeader .. sIndent .. " Return ......: " .. "Success " .. n
sHeader = sHeader .. sIndent .. " .............: " .. "Failure " .. n
sHeader = sHeader .. sIndent .. " Author ......: " .. props['UDFCreator'] .. n
sHeader = sHeader .. sIndent .. " Remarks .....: " .. n
sHeader = sHeader .. sIndent .. "]]\n" .. sIndent .. string.rep("-", 100) .. n
editor:InsertText(home, sHeader)
end
FunctionHeader:SelectExt()
Alles anzeigen