Scite Display Functions

lua-users home
wiki

The script collects the functions and display in the usertable. It works with php file. There is no oop-design. I hope having time to develop this script.
----------------------------------------------
-- @ script  : SciTE_DisplayFunctions.lua
-- @ creator : gongadze
-- @ desc    : the script collects the functions and display in the usertable
-- @ desc    : if you stand on a functionname and press Ctrl-2 you are 
-- @ desc    : immediately routed to the function definition
-- @ version : v0.02 
----------------------------------------------
function UserListShow(list)

   local s = ''
   local sep = ';'
   local n = table.getn(list)
   for i = 1,n-1 do
      s = s..list[i]..sep
   end
   s = s..list[n]
   editor.AutoCSeparator = string.byte(sep)
   editor:UserListShow(12,s)
   editor.AutoCSeparator = string.byte(' ')
 end
function AllLinesWithText(txt,flags)

    if not flags then flags = 0 end
    local s,e = editor:findtext(txt,flags,0)
    local result = {}
    while s do 
      local l = editor:LineFromPosition(s)
      -- trace(l..' '..editor:GetLine(l))
      func = strip(editor:GetLine(l))
      table.insert(result,func)
      s,e = editor:findtext(txt,flags,e+1)
    end    
    return result
end
function strip(str)

	str=string.gsub(str, "^%s+","")
	if string.find(str, "\r\n") then
	return string.gsub(str, "\r\n", "")
	else
	return string.gsub(str, "\n", "")
	end
end
function charAt(n)

	return string.char(editor.CharAt[n])
end
function getCurrentWord()
		
	_curpos = editor.CurrentPos
	regexp = "[a-zA-Z_]" --> ProgLang-specific REGEXP
	curpos = _curpos
	char=charAt(curpos)
	right=''
	while string.find(char,regexp)  do
		right=right..char
		curpos = curpos + 1
		char=charAt(curpos)
		--trace(char)
	end
	regexp = "[a-zA-Z_]"
	curpos = _curpos-1
	char=charAt(curpos)
	left=''
	while string.find(char,regexp) do
		left=char..left
		curpos = curpos - 1
		char=charAt(curpos)
	end
	result = left..right
	if result == '' then
		return false
	else
		return result
	end
end
function isInFunctionTable(table,value)

	indicator = false
	for k,v in pairs(table) do
		if string.find(v,("^function "..value)) then indicator = true end
	end
	return indicator
end
function DisplayFunctions()

	function_catch = '^[ |\t]*function [a-zA-Z0-9_:&]*([a-zA-Z0-9,_ \$\=\&]*)' -->  ProgLang-specific REGEXP
	ki = AllLinesWithText(function_catch,SCFIND_REGEXP)
	current_word = getCurrentWord()
	if  (current_word) and (isInFunctionTable(ki,current_word)) then
		local s,e = editor:findtext("^[ |\t]*function "..current_word,SCFIND_REGEXP,0)
		editor:GotoPos(s)
		-- editor:MarkerAdd(editor:LineFromPosition(editor.CurrentPos),1)
	else
		if ( table.getn(ki) > 0 ) then
			UserListShow(ki)
		end
	end
	return 0
end
function OnUserListSelection(listID, s)

  local s,e = editor:findtext(s,SCFIND_REGEXP,0)
  editor:GotoPos(s)
  return 0
end

RecentChanges · preferences
edit · history
Last edited February 27, 2017 11:52 am GMT (diff)