Тема: SciTE: вывод списка процедур/функций, имеющихся в коде
Скрипт FuncProcList.lua. Если у вас уже установлен этот скрипт, просто скопируйте поверх.
Улучшения по сравнению со сборкой SciTE 1.74 Ru-Board Edition: убрана расстановка закладок при нажатии F4, убран вывод в список закомментированных функций/процедур, добавлена поддержка VBScript.
Автор скрипта - mozers.
-- FuncProcList.lua
-- Version: 1.2
-- mozers™ , Maximka (выполняя пожелание ALeXkRU при активном тестировании mimir)
-- Использованы идеи: Grisper и gansA
---------------------------------------------------
-- Вывод списка функций / процедур, имеющихся в коде
-- Для подключения добавьте в свой файл .properties следующие строки:
-- command.name.17.*=List of Functions / Procedures
-- command.17.*=dofile $(SciteDefaultHome)\tools\FuncProcList.lua
-- command.mode.17.*=subsystem:lua,savebefore:no
-- command.shortcut.17.*=Alt+Shift+F
---------------------------------------------------
local function IsComment(pos)
local style = editor.StyleAt[pos]
local lexer = editor.LexerLanguage
local comment = ""
if lexer == 'cpp' then comment = "1,2,3"
elseif lexer == 'lua' then comment = "1,2,3"
elseif lexer == 'sql' then comment = "1,2,3"
elseif lexer == 'pascal' then comment = "1,2,3"
elseif lexer == 'ruby' then comment = "2"
elseif lexer == 'perl' then comment = "2"
elseif lexer == 'hypertext' then comment = "9,42,43,44,57,58,59,72,82,92,107,124,125"
elseif lexer == 'xml' then comment = "9,29"
elseif lexer == 'css' then comment = "9"
else comment = "1"
end
if string.find(comment, '[^%d]'..style..'[^%d]') ~= nil then return true end
return false
end
-- паттерны для разных языков программирования (корректируйте, дополняйте)
-- шлите ваши варианты на mozers<собачка>mail.ru
local findRegExp = {
--~ ['cxx']="\n[^,.<>=\n]-([^%s,.<>=\n]+[(][^.<>=\n)]-[)])%s-%b{}",
['cxx']="([^.,<>=\n]-[ :][^.,<>=\n%s]+[(][^.<>=)]-[)])[%s\/}]-%b{}",
['h']="([^.,<>=\n]-[ :][^.,<>=\n%s]+[(][^.<>=)]-[)])[%s\/}]-%b{}",
['js']="(\n[^,<>\n]-function[^(]-%b())[^{]-%b{}",
['vbs']="(\n[SsFf][Uu][BbNn][^\r]-)\r",
['css']="([%w.#-_]+)[%s}]-%b{}",
['pas']="\nprocedure[^ ]* ([^(]*%b());"
}
local findPattern = findRegExp [props["FileExt"]]
if findPattern == nil then
-- универсальный паттерн для всех остальных языков программирования
findPattern = "\n[local ]*[SsFf][Uu][BbNn][^ ]* ([^(]*%b())"
end
-- дальше - банальный поиск заданнго паттерна по всему тексту
--~ editor:MarkerDeleteAll(1)
local textAll = editor:GetText()
local startPos, endPos, findString
local count = 0
startPos = 1
print("> Список функций / процедур:")
while true do
startPos, endPos, findString = string.find(textAll, findPattern, startPos)
if startPos == nil then break end
-- убираем переводы строк и лишние пробелы
findString = string.gsub (findString, "\r\n", "")
findString = string.gsub (findString, "%s+", " ")
-- если функция не закомментирована, то выводим ее в список
if not IsComment(startPos) then
local line = editor:LineFromPosition(startPos)
--~ editor:MarkerAdd(line,1)
print(props['FileNameExt']..':'..(line+1)..':\t'..findString)
count = count + 1
end
startPos = endPos + 1
end
if count > 0 then
trace("> Найдено: "..count.." функций / процедур\nДвойной щелчок на строке с результатом установит курсор на оригинальную строку")
else
trace("> Функций / процедур не найдено!")
end
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.