summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-14 23:23:17 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-14 23:23:17 +0200
commit0ba042961f929ff43f977c2ebdba9368f42d9c52 (patch)
tree59220f91eb954e7400bf8846ae8010dd22532029
parent26dcc7e8df8f0f1852752b9107ba4b0408061554 (diff)
Added Lua interfae. (Luis Carvalho)
-rw-r--r--Filelist2
-rw-r--r--Makefile4
-rw-r--r--runtime/doc/Makefile2
-rw-r--r--runtime/doc/eval.txt1
-rw-r--r--runtime/doc/help.txt1
-rw-r--r--runtime/doc/if_lua.txt239
-rw-r--r--runtime/doc/index.txt3
-rw-r--r--runtime/doc/tags13
-rw-r--r--runtime/doc/todo.txt3
-rw-r--r--runtime/doc/various.txt2
-rw-r--r--runtime/doc/version7.txt9
-rw-r--r--runtime/doc/vi_diff.txt2
-rw-r--r--src/Make_bc5.mak45
-rw-r--r--src/Make_cyg.mak27
-rw-r--r--src/Make_ming.mak33
-rw-r--r--src/Make_mvc.mak44
-rw-r--r--src/Makefile25
-rwxr-xr-xsrc/auto/configure149
-rw-r--r--src/buffer.c3
-rw-r--r--src/config.aap.in6
-rw-r--r--src/config.h.in3
-rw-r--r--src/config.mk.in6
-rw-r--r--src/configure.in75
-rw-r--r--src/eval.c11
-rw-r--r--src/ex_cmds.h6
-rw-r--r--src/ex_docmd.c6
-rw-r--r--src/feature.h1
-rw-r--r--src/globals.h3
-rw-r--r--src/if_lua.c1099
-rw-r--r--src/main.aap5
-rw-r--r--src/main.c3
-rw-r--r--src/proto.h4
-rw-r--r--src/proto/if_lua.pro8
-rw-r--r--src/version.c9
-rw-r--r--src/window.c4
35 files changed, 1835 insertions, 21 deletions
diff --git a/Filelist b/Filelist
index d41af0a22b..9585fc522d 100644
--- a/Filelist
+++ b/Filelist
@@ -210,6 +210,7 @@ SRC_UNIX = \
SRC_DOS_UNIX = \
src/if_cscope.c \
src/if_cscope.h \
+ src/if_lua.c \
src/if_mzsch.c \
src/if_mzsch.h \
src/if_perl.xs \
@@ -219,6 +220,7 @@ SRC_DOS_UNIX = \
src/if_sniff.h \
src/if_tcl.c \
src/proto/if_cscope.pro \
+ src/proto/if_lua.pro \
src/proto/if_mzsch.pro \
src/proto/if_perl.pro \
src/proto/if_perlsfio.pro \
diff --git a/Makefile b/Makefile
index 55f8fc9a6a..2a7f7672b6 100644
--- a/Makefile
+++ b/Makefile
@@ -80,8 +80,8 @@ DOSBIN_S = dosbin_s
# runtime/doc/*.txt and nsis/gvim.nsi. Other things in README_os2.txt. For a
# minor/major version: src/GvimExt/GvimExt.reg, src/vim.def, src/vim16.def.
# - Correct included_patches[] in src/version.c.
-# - Compile Vim with GTK, Perl, Python, TCL, Ruby, MZscheme (if you can make it
-# work), Cscope and "huge" features. Exclude workshop and SNiFF.
+# - Compile Vim with GTK, Perl, Python, TCL, Ruby, MZscheme, Lua (if you can
+# make it work), Cscope and "huge" features. Exclude workshop and SNiFF.
# - With these features: "make proto" (requires cproto and Motif installed;
# ignore warnings for missing include files, fix problems for syntax errors).
# - With these features: "make depend" (works best with gcc).
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 7068943251..3505c037de 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -40,6 +40,7 @@ DOCS = \
helphelp.txt \
howto.txt \
if_cscop.txt \
+ if_lua.txt \
if_mzsch.txt \
if_ole.txt \
if_perl.txt \
@@ -171,6 +172,7 @@ HTMLS = \
helphelp.html \
howto.html \
if_cscop.html \
+ if_lua.html \
if_mzsch.html \
if_ole.html \
if_perl.html \
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 34a1fdb067..0860aab766 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -6095,6 +6095,7 @@ lispindent Compiled with support for lisp indenting.
listcmds Compiled with commands for the buffer list |:files|
and the argument list |arglist|.
localmap Compiled with local mappings and abbr. |:map-local|
+lua Compiled with Lua interface |Lua|.
mac Macintosh version of Vim.
macunix Macintosh version of Vim, using Unix files (OS-X).
menu Compiled with support for |:menu|.
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index 9fe2c6bf03..79468bbbee 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -158,6 +158,7 @@ GUI ~
Interfaces ~
|if_cscop.txt| using Cscope with Vim
+|if_lua.txt| Lua interface
|if_mzsch.txt| MzScheme interface
|if_perl.txt| Perl interface
|if_pyth.txt| Python interface
diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt
new file mode 100644
index 0000000000..ff3c0f26f5
--- /dev/null
+++ b/runtime/doc/if_lua.txt
@@ -0,0 +1,239 @@
+*if_lua.txt* For Vim version 7.3a. Last change: 2008 Aug 31
+
+
+ VIM REFERENCE MANUAL by Luis Carvalho
+
+
+The Lua Interface to Vim *lua* *Lua*
+
+1. Commands |lua-commands|
+2. The vim module |lua-vim|
+3. Buffer userdata |lua-buffer|
+4. Window userdata |lua-window|
+
+{Vi does not have any of these commands}
+
+The Lua interface is available only when Vim was compiled with the
+|+lua| feature.
+
+==============================================================================
+1. Commands *lua-commands*
+
+ *:lua*
+:[range]lua {chunk}
+ Execute Lua chunk {chunk}. {not in Vi}
+
+Examples:
+>
+ :lua print("Hello, Vim!")
+ :lua local curbuf = vim.buffer() curbuf[7] = "line #7"
+<
+
+:[range]lua << {endmarker}
+{script}
+{endmarker}
+ Execute Lua script {script}. {not in Vi}
+ Note: This command doesn't work when the Lua
+ feature wasn't compiled in. To avoid errors, see
+ |script-here|.
+
+{endmarker} must NOT be preceded by any white space. If {endmarker} is
+omitted from after the "<<", a dot '.' must be used after {script}, like
+for the |:append| and |:insert| commands.
+This form of the |:lua| command is mainly useful for including Lua code
+in Vim scripts.
+
+Example:
+>
+ function! CurrentLineInfo()
+ lua << EOF
+ local linenr = vim.window().line
+ local curline = vim.buffer()[linenr]
+ print(string.format("Current line [%d] has %d chars",
+ linenr, #curline))
+ EOF
+ endfunction
+<
+
+ *:luado*
+:[range]luado {body} Execute Lua function$function (line)${body}$end$ for
+ each line in the [range], with the function argument
+ being set to the text of each line in turn, without a
+ trailing <EOL>. If the value returned by the function
+ is a string it becomes the text of the line in the
+ current turn. The default for [range] is the whole
+ file: "1,$". {not in Vi}
+
+Examples:
+>
+ :luado return string.format("%s\t%d", line:reverse(), #line)
+
+ :lua require"lpeg"
+ :lua -- balanced parenthesis grammar:
+ :lua bp = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
+ :luado if bp:match(line) then return "-->\t" .. line end
+<
+
+ *:luafile*
+:[range]luafile {file}
+ Execute Lua script in {file}. {not in Vi}
+ The whole argument is used as a single file name.
+
+Examples:
+>
+ :luafile script.lua
+ :luafile %
+<
+
+All these commands execute a Lua chunk from either the command line (:lua and
+:luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+interpreter, each chunk has its own scope and so only global variables are
+shared between command calls. Lua default libraries$table$,$string$,$math$,
+and$package$are available,$io$and$debug$are not, and$os$is restricted to
+functions$date$,$clock$,$time$,$difftime$, and$getenv$. In addition,
+Lua$print$function has its output redirected to the Vim message area, with
+arguments separated by a white space instead of a tab.
+
+Lua uses the "vim" module (see|lua-vim|) to issue commands to Vim
+and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+procedures that alter buffer content, open new buffers, and change cursor
+position are restricted when the command is executed in the|sandbox|.
+
+
+==============================================================================
+2. The vim module *lua-vim*
+
+Lua interfaces Vim through the "vim" module. The first and last line of the
+input range are stored in$vim.firstline$and$vim.lastline$respectively. The
+module also includes routines for buffer, window, and current line queries,
+Vim evaluation and command execution, and others.
+
+ $vim.isbuffer(value)$ Returns#true#if$value$is a buffer userdata and
+ $false$otherwise (see|lua-buffer|).
+
+ $vim.buffer($[arg]$)$ If$arg$is a number, returns buffer with number
+ $arg$in the buffer list or, if$arg$is
+ a string, returns buffer whose full or short
+ name is$arg$. In both cases, returns#nil#if
+ the buffer is not found. Otherwise, if
+ $toboolean(arg)$is#true#returns the first
+ buffer in the buffer list or else the current
+ buffer.
+
+ $vim.iswindow(value)$ Returns#true#if$value$is a window userdata and
+ $false$otherwise (see|lua-window|).
+
+ $vim.window($[arg]$)$ If$arg$is a number, returns window with number
+ $arg$or#nil#if not found. Otherwise, if
+ $toboolean(arg)$is#true#returns the first
+ window or else the current window.
+
+ $vim.command(${cmd}$)$ Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+ :lua vim.command"set tw=60"
+ :lua vim.command"normal ddp"
+<
+ $vim.eval(${expr}$)$ Evaluates expression {expr} (see|expression|),
+ converts the result to Lua, and returns it.
+ Vim strings and numbers are directly converted
+ to Lua strings and numbers respectively. Vim
+ lists and dictionaries are converted to Lua
+ tables (lists become integer-keyed tables).
+ Examples: >
+ :lua tw = vim.eval"&tw"
+ :lua print(vim.eval"{'a': 'one'}".a)
+<
+ $vim.line()$ Returns the current line (without the trailing
+ <EOL>), a Lua string.
+
+ $vim.beep()$ Beeps.
+
+ $vim.open(${fname}$)$ Opens a new buffer for file {fname} and
+ returns it. Note that the buffer is not set as
+ current.
+
+
+==============================================================================
+3. Buffer userdata *lua-buffer*
+
+Buffer userdata represent vim buffers. A buffer userdata$b$has the following
+properties and methods:
+
+Properties
+----------
+ #o#$b()$sets$b$as the current buffer.
+ #o#$#b$is the number of lines in buffer$b$.
+ #o#$b[k]$represents line number$k$:$b[k] = newline$replaces line$k$
+ with string$newline$and$b[k] =$#nil#deletes line$k$.
+ #o#$b.name$contains the short name of buffer$b$(read-only).
+ #o#$b.fname$contains the full name of buffer$b$(read-only).
+ #o#$b.number$contains the position of buffer$b$in the buffer list
+ (read-only).
+
+Methods
+-------
+ #o#$b:insert(newline$[, pos]$)$inserts string$newline$at position$pos$
+ in the buffer. The default value for$pos$is$#b + 1$. If$pos == 0$
+ then$newline$becomes the first line in the buffer.
+ #o#$b:next()$returns the buffer next to$b$in the buffer list.
+ #o#$b:previous()$returns the buffer previous to$b$in the buffer list.
+ #o#$b:isvalid()$returns#true#if buffer$b$corresponds to a "real" (not
+ freed from memory) Vim buffer.
+
+Examples:
+>
+ :lua b = vim.buffer() -- current buffer
+ :lua print(b.name, b.number)
+ :lua b[1] = "first line"
+ :lua b:insert("FIRST!", 0)
+ :lua b[1] = nil -- delete top line
+ :lua for i=1,3 do b:insert(math.random()) end
+ :3,4lua for i=vim.lastline,vim.firstline,-1 do b[i] = nil end
+ :lua vim.open"myfile"() -- open buffer and set it as current
+
+ function! ListBuffers()
+ lua << EOF
+ local b = vim.buffer(true) -- first buffer in list
+ while b ~= nil do
+ print(b.number, b.name, #b)
+ b = b:next()
+ end
+ vim.beep()
+ EOF
+ endfunction
+<
+
+==============================================================================
+4. Window userdata *lua-window*
+
+Window objects represent vim windows. A window userdata$w$has the following
+properties and methods:
+
+Properties
+----------
+ #o#$w()$sets$w$as the current window.
+ #o#$w.buffer$contains the buffer of window$w$(read-only).
+ #o#$w.line$represents the cursor line position in window$w$.
+ #o#$w.col$represents the cursor column position in window$w$.
+ #o#$w.width$represents the width of window$w$.
+ #o#$w.height$represents the height of window$w$.
+
+Methods
+-------
+ #o#$w:next()$returns the window next to$w$.
+ #o#$w:previous()$returns the window previous to$w$.
+ #o#$w:isvalid()$returns#true#if window$w$corresponds to a "real" (not
+ freed from memory) Vim window.
+
+Examples:
+>
+ :lua w = vim.window() -- current window
+ :lua print(w.buffer.name, w.line, w.col)
+ :lua w.width = w.width + math.random(10)
+ :lua w.height = 2 * math.random() * w.height
+ :lua n,w = 0,vim.window(true) while w~=nil do n,w = n + 1,w:next() end
+ :lua print("There are " .. n .. " windows")
+<
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 743c712df3..6790e9c349 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1299,6 +1299,9 @@ The commands are sorted on the non-optional part of their name.
|:ltag| :lt[ag] jump to tag and add matching tags to the
location list
|:lunmap| :lu[nmap] like ":unmap!" but includes Lang-Arg mode
+|:lua| :lua execute |Lua| command
+|:luado| :luad[o] execute Lua command for each line
+|:luafile| :luaf[ile] execute |Lua| script file
|:lvimgrep| :lv[imgrep] search for pattern in files
|:lvimgrepadd| :lvimgrepa[dd] like :vimgrep, but append to current list
|:lwindow| :lw[indow] open or close location window
diff --git a/runtime/doc/tags b/runtime/doc/tags
index e72655dd35..6be654a492 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1165,6 +1165,8 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
+lispindent various.txt /*+lispindent*
+listcmds various.txt /*+listcmds*
+localmap various.txt /*+localmap*
++lua various.txt /*+lua*
++lua/dyn various.txt /*+lua\/dyn*
+menu various.txt /*+menu*
+mksession various.txt /*+mksession*
+modify_fname various.txt /*+modify_fname*
@@ -2365,6 +2367,9 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
:lt tagsrch.txt /*:lt*
:ltag tagsrch.txt /*:ltag*
:lu map.txt /*:lu*
+:lua if_lua.txt /*:lua*
+:luado if_lua.txt /*:luado*
+:luafile if_lua.txt /*:luafile*
:lunmap map.txt /*:lunmap*
:lv quickfix.txt /*:lv*
:lvimgrep quickfix.txt /*:lvimgrep*
@@ -4280,6 +4285,7 @@ L motion.txt /*L*
Linux-backspace options.txt /*Linux-backspace*
List eval.txt /*List*
Lists eval.txt /*Lists*
+Lua if_lua.txt /*Lua*
M motion.txt /*M*
MDI starting.txt /*MDI*
MS-DOS os_msdos.txt /*MS-DOS*
@@ -6055,6 +6061,7 @@ hit-enter-prompt message.txt /*hit-enter-prompt*
hit-return message.txt /*hit-return*
hitest.vim syntax.txt /*hitest.vim*
hjkl usr_02.txt /*hjkl*
+hl-ColorColumn syntax.txt /*hl-ColorColumn*
hl-Conceal syntax.txt /*hl-Conceal*
hl-Cursor syntax.txt /*hl-Cursor*
hl-CursorColumn syntax.txt /*hl-CursorColumn*
@@ -6248,6 +6255,7 @@ ident-search tips.txt /*ident-search*
idl-syntax syntax.txt /*idl-syntax*
idl.vim syntax.txt /*idl.vim*
if_cscop.txt if_cscop.txt /*if_cscop.txt*
+if_lua.txt if_lua.txt /*if_lua.txt*
if_mzsch.txt if_mzsch.txt /*if_mzsch.txt*
if_ole.txt if_ole.txt /*if_ole.txt*
if_perl.txt if_perl.txt /*if_perl.txt*
@@ -6424,6 +6432,11 @@ log10() eval.txt /*log10()*
long-lines version5.txt /*long-lines*
lowercase change.txt /*lowercase*
lpc.vim syntax.txt /*lpc.vim*
+lua if_lua.txt /*lua*
+lua-buffer if_lua.txt /*lua-buffer*
+lua-commands if_lua.txt /*lua-commands*
+lua-vim if_lua.txt /*lua-vim*
+lua-window if_lua.txt /*lua-window*
lua.vim syntax.txt /*lua.vim*
m motion.txt /*m*
m' motion.txt /*m'*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index fab62976fe..60e7f515d7 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1107,9 +1107,6 @@ Patches to possibly include:
- Patch for adding "J" flag to 'cinoptions': placement of jump label. (Manuel
Konig, 2010 Feb 19) Update by Lech Lorens, Feb 22.
Need another name, "J" is now used for Javascript.
-- Add Lua interface? (Wolfgang Oertl) patch by Luis Carvalho, 2008 Sep 5
- Patch for Make_ming.mak from Paul Moore (2008 Sep 1)
- http://code.google.com/p/vim-iflua/ Download vim72-lua-0.7.patch.gz
Needs some work:
- Have a look at patch to enable screen access from Python. (Marko Mahnic,
2010 Apr 12)
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index eed7d9c4c7..a56397246d 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -338,6 +338,8 @@ N *+lispindent* |'lisp'|
N *+listcmds* Vim commands for the list of buffers |buffer-hidden|
and argument list |:argdelete|
N *+localmap* Support for mappings local to a buffer |:map-local|
+m *+lua* |Lua| interface
+m *+lua/dyn* |Lua| interface |/dyn|
N *+menu* |:menu|
N *+mksession* |:mksession|
N *+modify_fname* |filename-modifiers|
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 8b537fc7ef..b047c615a4 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -7172,6 +7172,9 @@ executed.
Removed support for GTK 1. It was no longer maintained and required a lot of
#ifdefs in the source code. GTK 2 should be available for every system.
+It is no longer allowed to set the 'encoding' option from a modeline. It
+would corrupt the text.
+
Added *added-7.3*
-----
@@ -7188,6 +7191,9 @@ file.
Added the |+conceal| feature. (Vince Negri)
+Added the 'colorcolumn' option: highlight one or more columns in a window.
+E.g. to highlight the column after 'textwidth'. (partly by Gregor Uhlenheuer)
+
Added support for NetBeans in a terminal. Added |:nbstart| and |:nbclose|.
(Xavier de Gaye)
@@ -7196,6 +7202,9 @@ log(), sinh(), tan(), tanh(). (Bill McCarthy)
gettabvar() and settabvar() functions. (Yegappan Lakshmanan)
+Added the |Lua| interface.
+
+
New syntax files:
TODO
diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt
index 0365a90e1d..18566fc8dc 100644
--- a/runtime/doc/vi_diff.txt
+++ b/runtime/doc/vi_diff.txt
@@ -411,7 +411,7 @@ Scripts and Expressions. |expression|
etc., etc. See |eval|.
Debugging and profiling are supported. |debug-scripts| |profile|
If this is not enough, an interface is provided to |Python|, |Ruby|,
- |Tcl|, |Perl| and |MzScheme|.
+ |Tcl|, |Lua|, |Perl| and |MzScheme|.
Viminfo. |viminfo-file|
The command-line history, marks and registers can be stored in a file
diff --git a/src/Make_bc5.mak b/src/Make_bc5.mak
index 1373b4eb51..c3ddf00f62 100644
--- a/src/Make_bc5.mak
+++ b/src/Make_bc5.mak
@@ -35,6 +35,9 @@
# LINK name of the linker ($(BOR)\bin\ilink if OSTYPE is DOS16,
# $(BOR)\bin\ilink32 otherwise)
# GUI no or yes: set to yes if you want the GUI version (yes)
+# LUA define to path to Lua dir to get Lua support (not defined)
+# LUA_VER define to version of Lua being used (51)
+# DYNAMIC_LUA no or yes: set to yes to load the Lua DLL dynamically (no)
# PERL define to path to Perl dir to get Perl support (not defined)
# PERL_VER define to version of Perl being used (56)
# DYNAMIC_PERL no or yes: set to yes to load the Perl DLL dynamically (no)
@@ -129,6 +132,9 @@ CSCOPE = yes
NETBEANS = yes
!endif
+### LUA: uncomment this line if you want lua support in vim
+# LUA=c:\lua
+
### PERL: uncomment this line if you want perl support in vim
# PERL=c:\perl
@@ -199,6 +205,7 @@ ALIGN = 4
# Incompatible when calling external functions (like MSVC-compiled DLLs), so
# don't use FASTCALL when linking with external libs.
!if ("$(FASTCALL)"=="") && \
+ ("$(LUA)"=="") && \
("$(PYTHON)"=="") && \
("$(PERL)"=="") && \
("$(TCL)"=="") && \
@@ -292,6 +299,18 @@ INCLUDE = $(BOR)\include;.;proto
DEFINES = -DFEAT_$(FEATURES) -DWIN32 -DHAVE_PATHDEF \
-DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
+!ifdef LUA
+INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_LUA
+INCLUDE = $(LUA)\include;$(INCLUDE)
+! ifndef LUA_VER
+LUA_VER = 51
+! endif
+! if ("$(DYNAMIC_LUA)" == "yes")
+INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+LUA_LIB_FLAG = /nodefaultlib:
+! endif
+!endif
+
!ifdef PERL
INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PERL
INCLUDE = $(PERL)\lib\core;$(INCLUDE)
@@ -584,6 +603,11 @@ vimobj = $(vimobj) \
$(OBJDIR)\if_ole.obj
!endif
+!ifdef LUA
+vimobj = $(vimobj) \
+ $(OBJDIR)\if_lua.obj
+!endif
+
!ifdef PERL
vimobj = $(vimobj) \
$(OBJDIR)\if_perl.obj
@@ -692,6 +716,12 @@ MSG = $(MSG) NETBEANS
!ifdef XPM
MSG = $(MSG) XPM
!endif
+!ifdef LUA
+MSG = $(MSG) LUA
+! if "$(DYNAMIC_LUA)" == "yes"
+MSG = $(MSG)(dynamic)
+! endif
+!endif
!ifdef PERL
MSG = $(MSG) PERL
! if "$(DYNAMIC_PERL)" == "yes"
@@ -788,6 +818,9 @@ clean:
-@del *.ilf
-@del *.ils
-@del *.tds
+!ifdef LUA
+ -@del lua.lib
+!endif
!ifdef PERL
-@del perl.lib
!endif
@@ -825,6 +858,9 @@ $(DLLTARGET): $(OBJDIR) $(vimdllobj)
!endif
!if ($(OSTYPE)==WIN32)
import32.lib+
+!ifdef LUA
+ $(LUA_LIB_FLAG)lua.lib+
+!endif
!ifdef PERL
$(PERL_LIB_FLAG)perl.lib+
!endif
@@ -874,6 +910,9 @@ $(TARGET): $(OBJDIR) $(vimobj) $(OBJDIR)\$(RESFILE)
ole2w32.lib +
!endif
import32.lib+
+!ifdef LUA
+ $(LUA_LIB_FLAG)lua.lib+
+!endif
!ifdef PERL
$(PERL_LIB_FLAG)perl.lib+
!endif
@@ -912,6 +951,9 @@ $(OBJDIR)\ex_eval.obj: ex_eval.c ex_cmds.h
$(OBJDIR)\if_ole.obj: if_ole.cpp
+$(OBJDIR)\if_lua.obj: if_lua.c lua.lib
+ $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_lua.c
+
$(OBJDIR)\if_perl.obj: if_perl.c perl.lib
$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_perl.c
@@ -966,6 +1008,9 @@ char_u *compiled_user = (char_u *)"$(USERNAME)";
char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";
| auto\pathdef.c
+lua.lib: $(LUA)\lib\lua$(LUA_VER).lib
+ coff2omf $(LUA)\lib\lua$(LUA_VER).lib $@
+
perl.lib: $(PERL)\lib\CORE\perl$(PERL_VER).lib
coff2omf $(PERL)\lib\CORE\perl$(PERL_VER).lib $@
diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak
index 9091d09467..b3650bb05b 100644
--- a/src/Make_cyg.mak
+++ b/src/Make_cyg.mak
@@ -24,6 +24,9 @@
# MZSCHEME_VER define to version of MzScheme being used (209_000)
# DYNAMIC_MZSCHEME no or yes: use yes to load the MzScheme DLLs dynamically (yes)
# MZSCHEME_DLLS path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
+# LUA define to path to Lua dir to get Lua support (not defined)
+# LUA_VER define to version of Lua being used (51)
+# DYNAMIC_LUA no or yes: use yes to load the Lua DLL dynamically (yes)
# GETTEXT no or yes: set to yes for dynamic gettext support (yes)
# ICONV no or yes: set to yes for dynamic iconv support (yes)
# MBYTE no or yes: set to yes to include multibyte support (yes)
@@ -273,6 +276,30 @@ endif
endif
##############################
+# DYNAMIC_LUA=yes works.
+# DYNAMIC_LUA=no does not (unresolved externals on link).
+##############################
+ifdef LUA
+DEFINES += -DFEAT_LUA
+INCLUDES += -I$(LUA)/include
+EXTRA_OBJS += $(OUTDIR)/if_lua.o
+
+ifndef DYNAMIC_LUA
+DYNAMIC_LUA = yes
+endif
+
+ifndef LUA_VER
+LUA_VER = 51
+endif
+
+ifeq (yes, $(DYNAMIC_LUA))
+DEFINES += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+else
+EXTRA_LIBS += $(LUA)/lib/lua$(LUA_VER).lib
+endif
+endif
+
+##############################
ifeq (yes, $(GETTEXT))
DEFINES += -DDYNAMIC_GETTEXT
endif
diff --git a/src/Make_ming.mak b/src/Make_ming.mak
index c311e0f9c2..51fd523df8 100644
--- a/src/Make_ming.mak
+++ b/src/Make_ming.mak
@@ -104,6 +104,23 @@ PERLLIB=$(PERL)/lib
PERLLIBS=$(PERLLIB)/Core
endif
+# uncomment 'LUA' if you want a Lua-enabled version
+#LUA=/usr/local
+ifdef LUA
+ifndef DYNAMIC_LUA
+DYNAMIC_LUA=yes
+endif
+
+ifndef LUA_VER
+LUA_VER=51
+endif
+
+ifeq (no,$(DYNAMIC_LUA))
+LUA_LIB = -L$(LUA)/lib -llua
+endif
+
+endif
+
# uncomment 'MZSCHEME' if you want a MzScheme-enabled version
#MZSCHEME=d:/plt
ifdef MZSCHEME
@@ -294,6 +311,13 @@ CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
endif
endif
+ifdef LUA
+CFLAGS += -I$(LUA)/include -DFEAT_LUA
+ifeq (yes, $(DYNAMIC_LUA))
+CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+endif
+endif
+
ifdef MZSCHEME
CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
ifeq (yes, $(DYNAMIC_MZSCHEME))
@@ -427,6 +451,9 @@ OBJ = \
ifdef PERL
OBJ += $(OUTDIR)/if_perl.o
endif
+ifdef LUA
+OBJ += $(OUTDIR)/if_lua.o
+endif
ifdef MZSCHEME
OBJ += $(OUTDIR)/if_mzsch.o
MZSCHEME_INCL = if_mzsch.h
@@ -549,7 +576,7 @@ uninstal.exe: uninstal.c
$(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
$(TARGET): $(OUTDIR) $(OBJ)
- $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)
+ $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)
upx: exes
upx gvim.exe
@@ -632,7 +659,7 @@ ifneq (sh.exe, $(SHELL))
@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
@echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
- @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)";' >> pathdef.c
+ @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)";' >> pathdef.c
@echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
@echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
else
@@ -642,7 +669,7 @@ else
@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
@echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
- @echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)"; >> pathdef.c
+ @echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(RUBYLIB)"; >> pathdef.c
@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
endif
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 29dd623df9..7a144cc30c 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -30,6 +30,11 @@
# is yes)
# Global IME support: GIME=yes (requires GUI=yes)
#
+# Lua interface:
+# LUA=[Path to Lua directory]
+# DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
+# LUA_VER=[Lua version] (default is 51)
+#
# MzScheme interface:
# MZSCHEME=[Path to MzScheme directory]
# DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically)
@@ -152,6 +157,9 @@ OBJDIR = .\ObjC
!if "$(OLE)" == "yes"
OBJDIR = $(OBJDIR)O
!endif
+!ifdef LUA
+OBJDIR = $(OBJDIR)U
+!endif
!ifdef PERL
OBJDIR = $(OBJDIR)L
!endif
@@ -364,6 +372,9 @@ MSVCVER = 10.0
!if "$(_NMAKE_VER)" == "10.00.30319.01"
MSVCVER = 10.0
!endif
+!if "$(_NMAKE_VER)" == "9.00.30729.01"
+MSVCVER = 9.0
+!endif
!endif
# Abort bulding VIM if version of VC is unrecognised.
@@ -609,6 +620,27 @@ TCL_LIB = $(TCL)\lib\tcl$(TCL_VER)vc.lib
!endif
!endif
+# Lua interface
+!ifdef LUA
+!ifndef LUA_VER
+LUA_VER = 51
+!endif
+!message Lua requested (version $(LUA_VER)) - root dir is "$(LUA)"
+!if "$(DYNAMIC_LUA)" == "yes"
+!message Lua DLL will be loaded dynamically
+!endif
+CFLAGS = $(CFLAGS) -DFEAT_LUA
+LUA_OBJ = $(OUTDIR)\if_lua.obj
+LUA_INC = /I "$(LUA)\include" /I "$(LUA)"
+!if "$(DYNAMIC_LUA)" == "yes"
+CFLAGS = $(CFLAGS) -DDYNAMIC_LUA \
+ -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+LUA_LIB = /nodefaultlib:lua$(LUA_VER).lib
+!else
+LUA_LIB = "$(LUA)\lib\lua$(LUA_VER).lib"
+!endif
+!endif