aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+667e-11@users.noreply.github.com>2007-08-06 05:04:51 -0400
committerGravatar mitchell <70453897+667e-11@users.noreply.github.com>2007-08-06 05:04:51 -0400
commit1bf5960dfe20d6750c5d45f738f85aba323762cd (patch)
tree9ae1a4011d3bba5a21f3e3c8cc2bbd759098bec7
parent58dc16406976d8c18191470a6bafaeda793ed523 (diff)
Initial import of the lua module.
-rw-r--r--modules/lua/api164
-rw-r--r--modules/lua/commands.lua91
-rw-r--r--modules/lua/init.lua31
-rw-r--r--modules/lua/snippets.lua47
4 files changed, 333 insertions, 0 deletions
diff --git a/modules/lua/api b/modules/lua/api
new file mode 100644
index 00000000..f26e0b16
--- /dev/null
+++ b/modules/lua/api
@@ -0,0 +1,164 @@
+_G () holds global environment, setfenv changes environments
+_VERSION () current interpreter version "Lua 5.0"
+assert (v [, message]) error if v nil or false, otherwise returns v
+collectgarbage ([limit]) [Lua 5.0] set threshold to limit KBytes, default 0, may run GC
+collectgarbage (opt [, arg]) [Lua 5.1] opts: stop, restart, collect, count, step, setpause, setstepmul
+coroutine.create (f) creates coroutine from function f, returns coroutine
+coroutine.resume (co, val1, ...) continues execution of co, returns bool status plus any values
+coroutine.status (co) returns co status: "running", "suspended" or "dead"
+coroutine.wrap (f) creates coroutine with body f, returns function that resumes co
+coroutine.yield (val1, ...) suspend execution of calling coroutine
+debug.debug () enters interactive debug mode, line with only "cont" terminates
+debug.gethook () returns current hook function, hook mask, hook count
+debug.getinfo (function [, what]) returns table with information about a function
+debug.getlocal (level, local) returns name and value of local variable with index local at stack level
+debug.getupvalue (func, up) returns name and value of upvalue with index up of function func
+debug.sethook (hook, mask [, count]) sets given function as a hook, mask="[crl]"
+debug.setlocal (level, local, value) sets local variable with index local at stack level with value
+debug.setupvalue (func, up, value) sets upvalue with index up of function func with value
+debug.traceback ([message]) returns a string with a traceback of the call stack
+dofile (filename) executes as Lua chunk, default stdin, returns value
+error (message [, level]) terminates protected func, never returns, level 1 (default), 2=parent
+file:close () closes file
+file:flush () saves any written data to file
+file:lines () returns iterator function to return lines, nil ends
+file:read (format1, ...) reads file according to given formats, returns read values or nil
+file:seek ([whence] [, offset]) sets file pos, whence="set"|"cur"|"end", defaults "curr",0, returns file pos
+file:write (value1, ...) writes strings or numbers to file
+gcinfo () [Lua 5.0] returns dynamic mem in use (KB), and current GC threshold (KB)
+getfenv (f) gets env, f can be a function or number (stack level, default=1), 0=global env
+getmetatable (object) returns metatable of given object, otherwise nil
+io.close ([file]) closes file, or the default output file
+io.flush () flushes the default output file
+io.input ([file]) opens file in text mode, sets as default input file, or returns current default input file
+io.lines ([filename]) open file in read mode, returns iterator function to return lines, nil ends
+io.open (filename [, mode]) opens file in specified mode "[rawb+]", returns handle or nil
+io.output ([file]) opens file in text mode, sets as default output file, or returns current default output file
+io.read (format1, ...) reads file according to given formats, returns read values or nil
+io.stderr
+io.stdin
+io.stdout
+io.tmpfile () returns a handle for a temporary file, opened in update mode
+io.type (obj) returns "file" if obj is an open file handle, "close file" if closed, or nil if not a file handle
+io.write (value1, ...) writes strings or numbers to file
+ipairs (t) returns an iterator function, table t and 0
+loadfile (filename) loads chunk without execution, returns chunk as function, else nil plus error
+loadlib (libname, funcname) [Lua 5.0] links to dynamic library libname, returns funcname as a C function
+loadstring (string [, chunkname]) loads string as chunk, returns chunk as function, else nil plus error
+math.abs (v) returns absolute value of v
+math.acos (v) returns arc cosine value of v in radians
+math.asin (v) returns arc sine value of v in radians
+math.atan (v) returns arc tangent value of v in radians
+math.atan2 (v1, v2) returns arc tangent value of v1/v2 in radians
+math.ceil (v) returns smallest integer >= v
+math.cos (rad) returns cosine value of angle rad
+math.deg (rad) returns angle in degrees of radians rad
+math.exp (v) returns e^v
+math.floor (v) returns largest integer <= v
+math.frexp (v) returns mantissa [0.5,1) and exponent values of v
+math.ldexp (v1, v2) returns v1*2^v2
+math.log (v) returns natural logarithm of v
+math.log10 (v) returns logarithm 10 of v
+math.max (v1, ...) returns maximum in a list of one or more values
+math.min (v1, ...) returns minimum in a list of one or more values
+math.mod (v1, v2) [Lua 5.0] returns remainder of v1/v2 which is v1 - iV2 for some integer i
+math.fmod (v1, v2) [Lua 5.1] returns remainder of v1/v2 which is v1 - iV2 for some integer i
+math.pow (v1, v2) returns v1 raised to the power of v2
+math.rad (deg) returns angle in radians of degrees deg
+math.random ([n [, u]]) returns random real [0,1), integer [1,n] or real [1,u] (with n=1)
+math.randomseed (seed) sets seed for pseudo-random number generator
+math.sin (rad) returns sine value of angle rad
+math.sqrt (v) returns square root of v
+math.tan (rad) returns tangent value of angle rad
+next (table [, index]) returns next index,value pair, if index=nil (default), returns first index
+package.cpath
+package.loaded
+package.loadlib(libname, funcname) [Lua 5.1]
+package.path
+package.preload
+package.seeall(module) [Lua 5.1]
+os.clock () returns CPU time used by program in seconds
+os.date ([format [, time]]) returns a string or table containing date and time, "*t" returns a table
+os.difftime (t2, t1) returns number of seconds from time t1 to time t2
+os.execute (command) executes command using C function system, returns status code
+os.exit ([code]) terminates host program with optional code, default is success code
+os.getenv (varname) returns value of environment variable varname. nil if not defined
+os.remove (filename) deletes file with given name, nil if fails
+os.rename (oldname, newname) renames file oldname to newname, nil if fails
+os.setlocale (locale [, category]) set current locale of program, returns name of new locate or nil
+os.time ([table]) returns current time (usually seconds) or time as represented by table
+os.tmpname () returns a string with a filename for a temporary file (dangerous! tmpfile is better)
+pairs (t) returns the next function and table t plus a nil, iterates over all key-value pairs
+pcall (f, arg1, arg2, ...) protected mode call, catches errors, returns status code first (true=success)
+print (e1, e2, ...) prints values to stdout using tostring
+rawequal (v1, v2) non-metamethod v1==v2, returns boolean
+rawget (table, index) non-metamethod get value of table[index], index != nil
+rawset (table, index, value) non-metamethod set value of table[index], index != nil
+require (packagename) loads package, updates _LOADED, returns boolean
+setfenv (f, table) sets env, f can be a function or number (stack level, default=1), 0=global env
+setmetatable (table, metatable) sets metatable, nil to remove metatable
+string.byte (s [, i]) returns numerical code, nil if index out of range, default i=1
+string.char (i1, i2, ...) returns a string built from 0 or more integers
+string.dump (function) returns binary representation of function, used with loadstring
+string.find (s, pattern [, init [, plain]]) matches pattern in s, returns start,end indices, else nil
+string.format (formatstring, e1, e2, ...) returns formatted string, printf-style
+string.gfind (s, pat) [Lua 5.0] returns iterator function that returns next captures from pattern pat on s
+string.gmatch (s, pat) [Lua 5.1] returns iterator function that returns next captures from pattern pat on s
+string.gsub (s, pat, repl [, n]) returns copy of s with pat replaced by repl, and substitutions made
+string.len (s) returns string length
+string.lower (s) returns string with letters in lower case
+string.rep (s, n) returns string with n copies of string s
+string.sub (s, i [, j]) returns substring from index i to j of s, default j=-1 (string length)
+string.upper (s) returns string with letters in upper case
+table.concat (table [, sep [, i [, j]]]) returns concatenated table elements i to j separated by sep
+table.foreach (table, f) [Lua 5.0] executes f(index,value) over all elements of table, returns first non-nil of f
+table.foreachi (table, f) [Lua 5.0] executes f(index,value) in sequential order 1 to n, returns first non-nil of f
+table.getn (table) returns size of table, or n field, or table.setn value, or 1 less first index with nil value\n [Deprecated in Lua 5.1, use # operator]
+table.insert (table, [pos,] value) insert value at location pos in table, default pos=n+1
+table.remove (table [, pos]) removes element at pos from table, default pos=n
+table.setn (table, n) [Lua 5.0] sets size of table, n field of table if it exists
+table.sort (table [, comp]) sorts in-place elements 1 to n, comp(v1,v2) true if v1<v2, default <
+tonumber (e [, base]) convert to number, returns number, nil if non-convertible, 2<=base<=36
+tostring (e) convert to string, returns string
+type (v) returns type of v as a string
+unpack (list) returns all elements from list
+xpcall (f, err) pcall function f with new error handler err
+
+# lunit
+lunit.assert (assertion, [msg]) Fails, if 'assertion' is false or nil.
+lunit.assert_fail ([msg]) Always fails.
+lunit.assert_true (actual, [msg]) Fails, if 'actual' isn't true.
+lunit.assert_false (actual, [msg]) Fails, if 'actual' isn't false. (Even fails if 'actual' is a nil value!)
+lunit.assert_equal (expected, actual, [msg]) Fails, if 'actual' is different from 'expected'.
+lunit.assert_not_equal (unexpected, actual, [msg]) Fails, if 'actual' and 'unexpected' are equal.
+lunit.assert_match (pattern, actual, [msg]) Fails, if the string 'actual' doesn't match 'pattern'.
+lunit.assert_not_match (pattern, actual, [msg]) Fails, if the string 'actual' match 'pattern'.
+lunit.assert_nil (actual, [msg]) Fails, if 'actual' isn't a nil value.
+lunit.assert_not_nil (actual, [msg]) Fails, if 'actual' is a nil value.
+lunit.assert_boolean (actual, [msg]) Fails, if 'actual' isn't true or false.
+lunit.assert_not_boolean (actual, [msg]) Fails, if 'actual' is true or false.
+lunit.assert_number (actual, [msg]) Fails, if 'actual' isn't a number.
+lunit.assert_not_number (actual, [msg]) Fails, if 'actual' is a number.
+lunit.assert_string (actual, [msg]) Fails, if 'actual' isn't a string.
+lunit.assert_not_string (actual, [msg]) Fails, if 'actual' is a string.
+lunit.assert_table (actual, [msg]) Fails, if 'actual' isn't a table.
+lunit.assert_not_table (actual, [msg]) Fails, if 'actual' is a table.
+lunit.assert_function (actual, [msg]) Fails, if 'actual' isn't a function.
+lunit.assert_not_function (actual, [msg]) Fails, if 'actual' is a function.
+lunit.assert_thread (actual, [msg]) Fails, if 'actual' isn't a thread (created by coroutine.create or coroutine.wrap).
+lunit.assert_not_thread (actual, [msg]) Fails, if 'actual' is a thread.
+lunit.assert_userdata (actual, [msg]) Fails, if 'actual' isn't userdata.
+lunit.assert_not_userdata (actual, [msg]) Fails, if 'actual' is userdata.
+lunit.assert_error ([msg], func) Fails, if 'func' doesn't raises an error (using error ()).
+lunit.assert_pass ([msg], func) Fails, if 'func' raises an error.
+lunit.is_nil (actual)
+lunit.is_boolean (actual)
+lunit.is_number (actual)
+lunit.is_string (actual)
+lunit.is_table (actual)
+lunit.is_function (actual)
+lunit.is_thread (actual)
+lunit.is_userdata (actual)
+lunit.run () Run all testcases
+lunit.wrap (func) Wrap a single function to form a independent testcase
+lunit.TestCase (description) Group related tests into a testcase object
diff --git a/modules/lua/commands.lua b/modules/lua/commands.lua
new file mode 100644
index 00000000..8cf25c87
--- /dev/null
+++ b/modules/lua/commands.lua
@@ -0,0 +1,91 @@
+-- Copyright 2007 Mitchell mitchell<att>caladbolg.net. See LICENSE.
+
+---
+-- Commands for the lua module.
+module('modules.lua.commands', package.seeall)
+
+---
+-- Patterns for auto 'end' completion for control structures.
+-- @class table
+-- @name control_structure_patterns
+-- @see try_to_autocomplete_end
+local control_structure_patterns = {
+ '^%s*for', '^%s*function', '^%s*if', '^%s*repeat', '^%s*while',
+ 'function%s*%b()%s*$', '^%s*local%s*function'
+}
+
+---
+-- Try to autocomplete Lua's 'end' keyword for control structures like 'if',
+-- 'while', 'for', etc.
+-- @see control_structure_patterns
+function try_to_autocomplete_end()
+ local buffer = buffer
+ buffer:begin_undo_action()
+ buffer:line_end() buffer:new_line()
+ local line_num = buffer:line_from_position(buffer.current_pos)
+ local line = buffer:get_line(line_num - 1)
+ for _, patt in ipairs(control_structure_patterns) do
+ if line:match(patt) then
+ local indent = buffer.line_indentation[line_num - 1]
+ buffer:add_text( patt:match('repeat') and '\nuntil' or '\nend' )
+ buffer.line_indentation[line_num + 1] = indent
+ buffer.line_indentation[line_num] = indent + buffer.indent
+ buffer:line_up() buffer:line_end()
+ break
+ end
+ end
+ buffer:end_undo_action()
+end
+
+---
+-- Determine the Lua file being 'require'd, and search through package.path for
+-- that file and open it in Textadept.
+function goto_required()
+ local buffer = buffer
+ local line = buffer:get_line( buffer:line_from_position(buffer.current_pos) )
+ local patterns = { 'require%s*(%b())', 'require%s*(([\'"])[^%2]+%2)' }
+ local file
+ for _, patt in ipairs(patterns) do
+ file = line:match(patt)
+ if file then break end
+ end
+ file = file:sub(2, -2):gsub('%.', '/')
+ for path in package.path:gmatch('[^;]+') do
+ path = path:gsub('?', file)
+ local f = io.open(path)
+ if f then f:close() textadept.io.open(path) break end
+ end
+end
+
+---
+-- Executes the current file.
+function run()
+ local buffer = buffer
+ local out = io.popen('lua "'..buffer.filename..'" 2>&1'):read('*all')
+ buffer = textadept.new_buffer()
+ buffer:set_text('Command output:\n'..out)
+ buffer:set_save_point()
+end
+
+-- Lua-specific key commands.
+local keys = _G.keys
+if type(keys) == 'table' then
+ local m_editing = modules.textadept.editing
+ local m_handlers = textadept.handlers
+ keys.lua = {
+ al = { textadept.io.open, _HOME..'/modules/lua/init.lua' },
+ ac = {
+ g = { goto_required }
+ },
+ ['s\n'] = { try_to_autocomplete_end },
+ cq = { m_editing.block_comment, '--~' },
+ cg = { run },
+ ['('] = { function()
+ buffer.word_chars =
+ '_.:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ m_editing.show_call_tip(modules.lua.api, true)
+ buffer:set_chars_default()
+ return false
+ end },
+ }
+end
diff --git a/modules/lua/init.lua b/modules/lua/init.lua
new file mode 100644
index 00000000..751aa281
--- /dev/null
+++ b/modules/lua/init.lua
@@ -0,0 +1,31 @@
+-- Copyright 2007 Mitchell mitchell<att>caladbolg.net. See LICENSE.
+
+---
+-- The lua module.
+-- It provides utilities for editing Lua code.
+module('modules.lua', package.seeall)
+
+if type(_G.snippets) == 'table' then
+---
+-- Container for Lua-specific snippets.
+-- @class table
+-- @name snippets.lua
+ _G.snippets.lua = {}
+end
+
+if type(_G.keys) == 'table' then
+---
+-- Container for Lua-specific key commands.
+-- @class table
+-- @name keys.lua
+ _G.keys.lua = {}
+end
+
+require 'lua.commands'
+require 'lua.snippets'
+
+function set_buffer_properties()
+
+end
+
+api = textadept.io.read_api_file(_HOME..'/modules/lua/api', '%w_.:')
diff --git a/modules/lua/snippets.lua b/modules/lua/snippets.lua
new file mode 100644
index 00000000..eb884a8a
--- /dev/null
+++ b/modules/lua/snippets.lua
@@ -0,0 +1,47 @@
+-- Copyright 2007 Mitchell mitchell<att>caladbolg.net. See LICENSE.
+
+---
+-- Snippets for the lua module.
+module('modules.lua.snippets', package.seeall)
+
+local snippets = _G.snippets
+
+if type(snippets) == 'table' then
+ snippets.lua = {
+ l = "local ${1:expr}${2: = ${3:value}}",
+ p = "print(${0})",
+ f = "function ${1:name}(${2:args})\n ${0}\nend",
+ fori = "for ${1:i}, ${2:val} in ipairs(${3:table}) do\n ${0}\nend",
+ ['for'] = "for i=${1:1}, ${2:10}${3:, -1} do\n ${0}\nend",
+ forp = "for ${1:k}, ${2:v} in pairs(${3:table}) do\n ${0}\nend",
+ find = "string.find(${1:str}, ${2:pattern})",
+ len = "string.len(${1:str})",
+ gsub = "string.gsub(${1:str}, ${2:pattern}, ${3:repl})",
+ gfind = "for ${1:match} in string.gfind(${2:str}, ${3:pattern}) do\n ${0}\nend",
+ c = "-- ",
+
+ tc = "local ${1:tc} = lunit.TestCase('${2:description}')",
+ ae = "lunit.assert_equal(${1:expected}, ${2:actual})",
+ ane = "lunit.assert_not_equal(${1:unexpected}, ${2:actual})",
+ at = "lunit.assert_true(${1:actual})",
+ af = "lunit.assert_false(${1:actual})",
+ run = "lunit.run()",
+ abool = "lunit.assert_boolean(${1:expr})",
+ anbool = "lunit.assert_not_boolean(${1:expr})",
+ ['anil'] = "lunit.assert_nil(${1:expr})",
+ annil = "lunit.assert_not_nil(${1:expr})",
+ anum = "lunit.assert_number(${1:expr})",
+ annum = "lunit.assert_not_number(${1:expr})",
+ astr = "lunit.assert_string(${1:expr})",
+ anstr = "lunit.assert_not_string(${1:expr})",
+ atab = "lunit.assert_table(${1:expr})",
+ antab = "lunit.assert_not_table(${1:expr})",
+ athr = "lunit.assert_thread(${1:expr})",
+ anthr = "lunit.assert_not_thread(${1:expr})",
+ afunc = "lunit.assert_function(${1:expr})",
+ anfunc = "lunit.assert_not_function(${1:expr})",
+ aud = "lunit.assert_userdata(${1:expr})",
+ anud = "lunit.assert_not_userdata(${1:expr})"
+ }
+end
+