Список директив
Автор: Тугаринов Сергей / Дата: 25.04.2006 / Комментариев: 4
Категория: Скрипты, LUA
Внешний вид результатов работы скрипта вы можете увидеть на следующем снимке экрана:
На снимке экрана видно, что список сортируется в порядке указания таблицы директив, например для меня удобнее выстраивать его в порядке важности директивы, сначало ошибки (@BUG:), потом предложение о исправлении (@FIXME:), а в самом конце указываем, что нужно сделать (@TODO).
На значения директив, можете не смотреть, так как они тестовые :)
Собственно код скрипта:
Код LUA:
--~ Задаем таблицу директив
local find_table = { "@BUG:", "@FIXME:", "@TODO:" }
--~ Таблица символов подлежащих удалению
local remove_comment = { "//", "*" }
local flag = 0
function TrimString (sss)
-- удаляем двойные пробелы и всякое лишнее
local str1 = sss
-- удаляем двойные пробелы
while string.find(str1," ") do str1 = string.gsub(str1," "," ") end
-- удаляем пробелы в начале строки
while (string.sub (str1,1,1)==" ") and (string.len(str1)>1) do str1 = string.sub(str1, 2) end
return str1
end
function SkipSubStrings (ss)
--~ Удаляем из текста символы директив
local ss1 = ss
for i,v in pairs (find_table) do
ss1 = string.gsub(ss1,v," ")
end
--~ Удаляем символы подлежащие удалению
for i,v in pairs (remove_comment) do
ss1 = string.gsub(ss1,v," ")
end
ss1 = TrimString (ss1)
return ss1
end
--~ output:ClearAll()
local count = 0
trace(">СПИСОК ДИРЕКТИВ:\n")
trace("Строка Тип и значение директивы\n")
for i,v in pairs (find_table) do
local s,e = editor:findtext(v, flag, 0)
if(s ~= nil)
then
local m = editor:LineFromPosition(s) - 1
while s do
local l = editor:LineFromPosition(s)
if (l ~= m)
then
count = count + 1
local str = string.gsub(" "..editor:GetLine(l), "%s+", " ")
trace(":"..(l + 1)..":\t"..v.."\t"..SkipSubStrings(str).."\n")
m = l
end
s,e = editor:findtext(v, flag, e+1)
end
else
trace("> "..v.." не найдено!\n")
end
end
trace("Найдено "..count.." директив\n")Для использования скрипта в своих проектах необходимо сохранить его в директорию $(SciteDefaultHome)\tools\ под именем TodoList.lua и прописать в конфигурационном файле следующие строки:
Код .SciTEUser.properties:
command.name.24.*=Список директив
command.24.*=dofile $(SciteDefaultHome)\\tools\\TodoList.lua
command.mode.24.*=subsystem:lua,savebefore:noРесурсы:
P.S.
Скрипт ищет только однострочные директивы, в следующей версии будут обрабатываться многострочные, такие как:
Код:
/**
* @TODO:
* Первое предложение
* Второе предложение
* .....
* N... предложение
*/
Версия для печати / Прочитано: 10816 раз(а)
Комментариев: 4 (rss)
1. DeadMoroz / 27.04.2006 - 12:44
2. Тугаринов Сергей / 27.04.2006 - 12:53
Через пару дней обязательно займусь :)
3. Тугаринов Сергей / 03.05.2006 - 02:47
| Цитата |
Думаю, что заняться скриптом придется позже, времени не хватает :)
4. B4rr4cuda / 20.07.2008 - 01:09
| Цитата |
Немного доработал скрипт.
* Вызов процедуры TodoList_Output() выодит список в консоль (output)
* Процедура TodoList_ShowList() выводит окно автодополнения со списком тудушек, после выбора пункта, происходит переход на одну строку ниже туду.
Код:
Нижеследующее в конфиг юзера:
Код:
* Вызов процедуры TodoList_Output() выодит список в консоль (output)
* Процедура TodoList_ShowList() выводит окно автодополнения со списком тудушек, после выбора пункта, происходит переход на одну строку ниже туду.
Код:
--~ Задаем таблицу директив
local find_table = { "@BUG:", "@FIXME:", "@TODO:" }
--~ Таблица символов подлежащих удалению
local remove_comment = { "//", "*" }
local flag = 0
function TrimString (sss)
-- удаляем двойные пробелы и всякое лишнее
local str1 = sss
-- удаляем двойные пробелы
while string.find(str1," ") do str1 = string.gsub(str1," "," ") end
-- удаляем пробелы в начале строки
while (string.sub (str1,1,1)==" ") and (string.len(str1)>1) do str1 = string.sub(str1, 2) end
return str1
end
function SkipSubStrings (ss)
--~ Удаляем из текста символы директив
local ss1 = ss
for i,v in pairs (find_table) do
ss1 = string.gsub(ss1,v," ")
end
--~ Удаляем символы подлежащие удалению
for i,v in pairs (remove_comment) do
ss1 = string.gsub(ss1,v," ")
end
ss1 = TrimString (ss1)
return ss1
end
-- Add user event handler OnUserListSelection
local old_OnUserListSelection = OnUserListSelection
function OnUserListSelection(tp,sel_value)
local result
if old_OnUserListSelection then result = old_OnUserListSelection(tp,sel_value) end
if tp == 11 then
local pl=string.sub(sel_value,string.find(sel_value,'(%d+)'));
if tonumber(pl) and scite.SendEditor(SCI_GOTOLINE,pl) then
return true
end
end
return result
end
local Separator='';
function TodoList_ShowList()
Separator='\r'
local str=TodoList_GenStr();
if str ~= '' then
-- показать строку в всплывающем окне, используя /r в качестве разделителя строк
local sep=scite.SendEditor(SCI_AUTOCGETSEPARATOR);
scite.SendEditor(SCI_AUTOCSETSEPARATOR,13);
editor:UserListShow(11,str);
scite.SendEditor(SCI_AUTOCSETSEPARATOR,sep);
end
end
function TodoList_Output()
Separator='\n'
local str=TodoList_GenStr();
if str ~= '' then
-- вывод в консоль
trace(str);
end
end
function TodoList_GenStr()
-- output:ClearAll()
local count = 0
local strts='';
if Separator=='\n' then
strts=strts..">СПИСОК ДИРЕКТИВ:"..Separator
strts=strts.."Строка Тип и значение директивы"..Separator
end
for i,v in pairs (find_table) do
local s,e = editor:findtext(v, flag, 0)
if(s ~= nil)
then
local m = editor:LineFromPosition(s) - 1
while s do
local l = editor:LineFromPosition(s)
if (l ~= m)
then
count = count + 1
local str = string.gsub(" "..editor:GetLine(l), "%s+", " ")
strts=strts..":"..(l + 1)..":\t"..v.."\t"..SkipSubStrings(str)..Separator;
m = l
end
s,e = editor:findtext(v, flag, e+1)
end
else
if Separator=='\n' then
strts=strts.."> "..v.." не найдено!"..Separator;
else
trace("> "..v.." не найдено!\n")
end
end
end
if Separator=='\n' then
strts=strts.."Найдено "..count.." директив"..Separator;
elseif strts~='' then
strts=string.sub(strts,1,string.len(strts)-1)
end
return strts;
end
Нижеследующее в конфиг юзера:
Код:
command.name.26.*=Список директив
command.26.*=TodoList_ShowList()
command.mode.26.*=subsystem:lua,savebefore:no
command.shortcut.26.*=Ctrl+Alt+D
command.name.27.*=Список директив в output
command.27.*=TodoList_Output()
command.mode.27.*=subsystem:lua,savebefore:no
command.shortcut.27.*=Ctrl+Shift+D
| Цитата |
биллинг


http://tony2001.phpclub.net/doc/standard/doc.gotchas.html
Ждем поддержки многострочных директив ;)