diff options
| author | Anton Bobov <abobov@gmail.com> | 2013-10-03 09:48:51 +0600 |
|---|---|---|
| committer | Anton Bobov <abobov@gmail.com> | 2013-10-03 09:53:41 +0600 |
| commit | a909de07c5f982968cb8cd0f2101ac052f4a0034 (patch) | |
| tree | 99111641ac662d8b437d885befe50ff1a3f3dbf9 /files/.vim/doc | |
| parent | ede4983c110a5947fa034857a5e37bdbb03ab49a (diff) | |
Vim plugins cleaning up.
Diffstat (limited to 'files/.vim/doc')
| -rw-r--r-- | files/.vim/doc/javacomplete.txt | 558 | ||||
| -rw-r--r-- | files/.vim/doc/lua51refvim.txt | 5617 | ||||
| -rw-r--r-- | files/.vim/doc/rails.txt | 1131 | ||||
| -rw-r--r-- | files/.vim/doc/tags | 896 |
4 files changed, 0 insertions, 8202 deletions
diff --git a/files/.vim/doc/javacomplete.txt b/files/.vim/doc/javacomplete.txt deleted file mode 100644 index ae39ffb..0000000 --- a/files/.vim/doc/javacomplete.txt +++ /dev/null @@ -1,558 +0,0 @@ -*javacomplete.txt* For Vim version 7.0 and above. Last change: 2007 Sep 26 - - JAVACOMPLETE REFERENCE MANUAL by cheng fang~ - fangread@yahoo.com.cn~ - - -1. Overview |javacomplete-overview| - 1.1 Features |javacomplete-features| - 1.2 Requirements |javacomplete-requirements| - 1.3 Download |javacomplete-download| - 1.4 Install |javacomplete-install| -2. Usage |javacomplete-usage| - 2.1 Input contexts |javacomplete-contexts| - 2.2 Kind letter |javacomplete-kindletter| - 2.3 Options |javacomplete-options| - 2.4 Commands |javacomplete-commands| -3. Java parser in Vim |javacomplete-parser| - 3.1 Abstract Syntax Tree |javacomplete-ast| - 3.2 Global Constants |javacomplete-constants| - 3.3 Parsing Functions |javacomplete-functions| - 3.4 Sample |javacomplete-sample| -4. FAQ |javacomplete-faq| -5. Limitations |javacomplete-limitations| -6. History - 6.1 javacomplete |javacomplete-history| - 6.2 Parser |java-parser-history| - 6.2 Reflection.java |javacomplete-reflection| -7. Todo |javacomplete-todo| -8. Thanks |javacomplete-thanks| - -============================================================================== -1. Overview *javacomplete-overview* - -This is javacomplete, an omni-completion script of JAVA language for vim 7 and -above. It includes javacomplete.vim, java_parser.vim, Reflection.java, and -javacomplete.txt. - -1.1 Features *javacomplete-features* - -- List members of a class, including (static) fields, (static) methods and ctors. -- List classes or subpackages of a package. -- Provide parameters information of a method, list all overload methods. -- Complete an incomplete word. -- Provide a complete JAVA parser written in Vim script language. -- Use the JVM to obtain most information. -- Use the embedded parser to obtain the class information from source files. -- Tags generated by ctags can also be used. -- JSP is supported, Builtin objects such as request, session can be recognized. - The classes and jar files in the WEB-INF will be appended automatically to the classpath. - -1.2 Requirements *javacomplete-requirements* - -It works on all the platforms wherever -- Vim version 7.0 and above, -- JDK version 1.1 and above, -existed. - -1.3 Download *javacomplete-download* - -You can download the lastest version from this url: - http://www.vim.org/scripts/script.php?script_id=1785 - -1.4 Install *javacomplete-install* - -1. Unzip javacomplete.zip to a directory of 'runtimepath', e.g. -$HOME/.vim (unix/linux), $VIM/vimfiles (windows). > - > unzip javacomplete.zip -d ~/.vim - -< To update Vim help tags, run vim and run command: > - :helptags $HOME/.vim/doc -< or > - :helptags $VIM/vimfiles/doc - -NOTE: javacomplete.vim, java_parser.vim and Reflection.java should be in one -autoload directory of 'runtimepath'. -javacomplete.txt should be in one doc directory of 'runtimepath'. - -2. Set 'omnifunc' option. e.g. > - :setlocal omnifunc=javacomplete#Complete -< Or, use autocmd: > - :" Only do this part when compiled with support for autocommands. - :if has("autocmd") - : autocmd Filetype java setlocal omnifunc=javacomplete#Complete - :endif -You can add this command to your .vimrc or _vimrc. - -3. Set 'completefunc' option to show parameters information IF YOU LIKE. e.g. > - :setlocal completefunc=javacomplete#CompleteParamsInfo -You can map as follows for better display: > - :inoremap <buffer> <C-X><C-U> <C-X><C-U><C-P> - :inoremap <buffer> <C-S-Space> <C-X><C-U><C-P> - -4. Reflection.java will be automatcally compiled and placed to $HOME when you -use first time. Assure that Reflection.java is in the same directory with -javacomplete.vim to be searched in autoload subdirectory of &rtp. -If no Reflection.class is generated, check that you have the write permission -in $HOME directory. -If a previous Reflection.java is not compatible with the new version -javacomplete.vim, please compile Reflection.java manually. - -============================================================================== -2. Usage *javacomplete-usage* - -You can use it like other omni-completion script. Many samples of input context -are gived in the following section. - -Make sure a JVM launcher (default 'java') can be searched in the PATH enviroment -variable, otherwise Use javacomplete#SetJVMLauncher() to specify one. See option -`javacomplete-launcher`. - -See FAQ in time if some problem occurs. When meeting other problems not -described in FAQ, you can contact with the auther by the following e-mail: -fangread@yahoo.com.cn - -2.1 Input contexts |javacomplete-contexts| -It recognize nearly all kinds of Primary Expressions (see langspec-3.0) -except for "Primary.new Indentifier". Casting conversion is also supported. - -Samples of input contexts are as following: (Note that '|' indicates cursor) - (1). after '.', list members of a class or a package - - package.| subpackages and classes of a package - - Type.| static members of the 'Type' class and "class" - - var.| or field.| members of a variable or a field - - method().| members of result of method() - - this.| members of the current class - - ClassName.this.| members of the qualified class - - super.| members of the super class - - array.| members of an array object - - array[i].| array access, return members of the element of array - - "String".| String literal, return members of java.lang.String - - int.| or void.| primitive type or pseudo-type, return "class" - - int[].| array type, return members of a array type and "class" - - java.lang.String[].| - - new int[].| members of the new array instance - - new java.lang.String[i=1][].| - - new Type().| members of the new class instance - - Type.class.| class literal, return members of java.lang.Class - - void.class.| or int.class.| - - ((Type)var).| cast var as Type, return members of Type. - - (var.method()).| same with "var.|" - - (new Class()).| same with "new Class().|" - - (2). after '(', list matching methods with parameters information. - - method(|) methods matched - - var.method(|) methods matched - - new ClassName(|) constructors matched - - this(|) constructors of current class matched - - super(|) constructors of super class matched - Any place between '(' and ')' will be supported soon. - Help information of javadoc is not supported yet. - - (3). after an incomplete word, list all the matched beginning with it. - - var.ab| subset of members of var beginning with `ab` - - ab| list of all maybes - - (4). import statement - - " import java.util.|" - - " import java.ut|" - - " import ja|" - - " import java.lang.Character.|" e.g. "Subset" - - " import static java.lang.Math.|" e.g. "PI, abs" - - (5). package declaration - - " package com.|" - - The above are in simple expression. - (6). after compound expression: - - PrimaryExpr.var.| - - PrimaryExpr.method().| - - PrimaryExpr.method(|) - - PrimaryExpr.var.ab| - e.g. - - "java.lang . System.in .|" - - "java.lang.System.getenv().|" - - "int.class.toString().|" - - "list.toArray().|" - - "new ZipFile(path).|" - - "new ZipFile(path).entries().|" - - (7). Nested expression: - - "System.out.println( str.| )" - - "System.out.println(str.charAt(| )" - - "for (int i = 0; i < str.|; i++)" - - "for ( Object o : a.getCollect| )" - - -2.2 Kind letter *javacomplete-kindletter* - -A single letter indicates the kind of compeltion item. These kinds are: - + ctor - v local variable or parameter - f nonstatic field - F static field - m nonstatic method - M static method - P package - C class type - I interface type - -2.3 Options *javacomplete-options* - -1. Set java compiler (default 'javac') using the following function: - javacomplete#SetCompiler('javac') *javacomplete-compiler* - -2. Set java launcher (default 'java') using the following function: - javacomplete#SetJVMLauncher('java') *javacomplete-launcher* - -3. Set classpath using the following function: > - javacomplete#AddClassPath('jarfile_or_classes_path') - javacomplete#DelClassPath('jarfile_or_classes_path') - javacomplete#SetClassPath('semicolon_separated_string') -< - Another two variables will be used if they are existing: - |g:java_classpath| global classpath - |b:classpath| associated with current buffer - In one sense, s:classpath is like a classpath option for a PROJECT. - If some of them are body set, the priority of these variables is: - first, b:classpath first, - second, s:classpath - third, g:java_classpath - last, $CLASSPATH - -4. Set sourcepath using the following function: > - javacomplete#AddSourcePath('sources_file_path') - javacomplete#DelSourcePath('sources_file_path') - javacomplete#SetSourcePath('sources_file_path') - -5. Set option for using JDK1.1 if you meet the problem described in FAQ 3: > - javacomplete#UseJDK11() - -6. Set methods to search declaration: > - " 1 - by builtin searchdecl(), quickest but inaccurate in many cases. - " 2 - by special Searchdecl(), work NOT WELL YET. - " 4 - by java_parser, slowest but accurate in most cases. Not for JSP. - javacomplete#SetSearchdeclMethod() - -2.4 Commands *javacomplete-commands* - -============================================================================== -3. Java parser in Vim *javacomplete-parser* - -3.1 Abstract Syntax Tree *javacomplete-ast* - -3.2 Global Constants *javacomplete-constants* - -3.3 Parsing Functions *javacomplete-functions* - -3.4 Sample Codes *javacomplete-sample* -This parser can be a good candidate for anyone who needs a java parser to get -a abstract syntax tree for many use. The following are sample codes: > - - " NOTE: The script contains a single parser instance. You cannot create - " another parser! The only way to parse another JAVA code is reset the - " parser by calling java_parser#InitParser(). - - " 1. Initialize the parser - " for a code snippet, - call java_parser#InitParser(['for (int i = 0; i < N; i++) {', '', '}']) - " or for the current buffer, - call java_parser#InitParser(getline('^', '$')) - " or for a whole source file - call java_parser#InitParser(readfile('java/util/Arrays.java')) - - " 2. Get the result tree - call java_parser#compilationUnit() - " or others according to the input code - call java_parser#expression() - call java_parser#block() - call java_parser#statement() - - " 3. Use the tree as you like - - " 4. The default scan strategy is scanning only sklenton. - " You can change it by set the option 'scanStrategy'. - " The values for 'scanStrategy' option are: - " 0 - only class members when parse full file; - " 1 - keep statement as a whole string; - " 2 - all - call java_parser#InitParser(getline('^', '$'), {'scanStrategy': 2}) - - " 5. I recommend that keeping scanStrategy as default. - " If you want to parse a code snippet such as a method body of the whole - " file, you can call java_parser#GotoPosition() to go to what you are going - " to start parsing. - " Then, call java_parser#block(), java_parser#statement() or - " java_parser#expression() to parse the smaller snippet. - " NOTE: This way will keep the result tree reserved. - call java_parser#GotoPosition(def.body.pos) - call java_parser#block() - -============================================================================== -4. FAQ *javacomplete-faq* - -(1). When you meets the following problem: > - omni-completion error: Exception in thread "main" - java.lang.NoClassDefFoundError: Reflection -It is Reflection.class not found in autoload directory or $HOME that cause -this problem. -There are several reasons causing this problem: - o No compiler. Use javacomplete#SetCompiler() to specify one. - o No write permission for $HOME directory. - -(2). Reflection.java should be searched in autoload subdirectory of &rtp. -Reflection.class should be searched in $HOME or autoload subdirectory of &rtp. -If not found, javacomplete try to compile it and place the generated class -file in $HOME. - -(3). A error when using JDK1.1: - Unable to initialize threads: cannot find class java/lang/Thread -When I tested JDK1.1.8 on Windows XP, I found -classpath options cause it. -There are two way to avoid it is: - o Add the runtime classes to classpath, like - "${JDK118}\classes;${JDK118}\lib\classes.zip;${JDK118}\lib\classes.jar;" - o Add Reflection.class and others to the CLASSPATH enviroment variable. - And call javacomplete#UseJDK11() to set option. - -============================================================================== -5. Limitations *javacomplete-limitations* - -The embedded parser works a bit slower than expected. - -============================================================================== -6. History - -6.1 javacomplete *javacomplete-history* - -v0.77.1 - 2007-09-19 Supported showing method parameters information in any place - between parenthesises. - -v0.77 - 2007-09-19 bug fix - 2007-09-18 Added GetCurrentFileKey() avoid empty key of s:files for current buffer. - 2007-09-16 Use a new strategy for searching inherited members. - 2007-09-11 - - Supported new contexts "jav|", "var|", just after an incomplete word. - - Supported new context "abs(|)", a imported static method. - 2007-09-10 - - Improved FoundClassDeclaration() - - Fixed bug calling cursor(0, 0) - 2007-09-09 Rewrote DoGetClassInfo(), GetFQN() and IsFQN()ĄŁ - 2007-09-08 Fixed a bug when merging superclass's members - 2007-09-05 -- 07 - - Improved s:MergeLines() and s:ExtractCleanExpr(). - - Rewrote CompleteAfterDot(). Added ParseExpr(). Removed s:GetNextSubexprType() - - Supported accessible static imported members. - - Supported accessible inherited members. - - 2007-09-04 Used b:changedtick and getftime() to check buffer (or other file) for changing. - 2007-09-01 Supported not-file-name toplevel or static member class in source files. - -v0.76.8 - 2007-08-30 - - Created the s:TreeVisitor to search type or symbol names. - - Supported local and anonymous class. - - 2007-08-29 - - Supported appending automatically classpath under WEB-INF for jsp files. - -v0.76.7 - 2007-08-28 - - Fixed case of "new java.util.zip.ZipFile().|" - - Improved process of type arguments and method parameters. JAVA5+ - - Reorganize codes in javacomplete#Complete() - - Added CONTEXT_NEED_TYPE, removed CONTEXT_INCOMPLETE_WORD - - 2007-08-24 Add Context types for type declaration: CONTEXT_NEED_TYPE - -v0.76.6 - 2007-08-23 Improved GetStatement() and related. Bug fixed. - -v0.76.5 - 2007-08-21 - - Fixed bug: "foo().|", "getFoo().foo().|", - "for (Enumeration entries = ; entries.|; )". - - Supported input contexts: "((Object)o).|", "((Object)o).getClass().|", - "new ZipFile(path).|", "(new String().)|". - -v0.76.4 - 2007-08-17 - - Improved input contexts: "int.class.toString().|", "list.toArray().|". - - Fixed recognizing "this(|)", "method1(|)" - - Added the 'kind' letter to distinguish between classes and packages. - 2007-08-14 - - Support accessible nested classes. - - Support import static members and import accessible nested classes. - 2007-08-11 - - Fixed a bug when Reflection.java is in the path which contains space. - - Improved process of this and super in JSP. - - Fixed an severe bug parsing current jsp file. - -v0.76.3 - 2007-08-10 - - Add an option 'searchdecl' set by javacomplete#SetSearchdeclMethod(). - - Make an improvement for jsp file. - - Clear cache when set options affecting classpath. - - Improved DoGetPackageList() and s:GenerateImports(). - - Replace codes searching list of string with index(). - -v0.76.2 - 2007-08-08 - - Fix failing to list members of nested class. - - Combine members of local packages and loadable packages. - - Add quick recognition of package or import. - 2007-08-06 Add inherited fields and methods to local class. - -v0.76.1 - 2007-08-04 - - Fix using a: in javacomplete#SetClassPath() - - Fix a bug in javacomplete#GetClassPath() - -v0.76 2007-08-04 - 2007-08-04 - - Fix a infinite loop bug in s:GetMatchedIndexEx() - - Fix that array type not recognised in compound expression. - - Add a option for JDK1.1. See FAQ 3. - 2007-08-03 - - Improve for 'this' or 'super'. - - Support searching toplevel class in sourcepath. - - Clean - 2007-08-02 - - Improve the process of checking a class in one of packages. - 2007-08-01 - - Add Searchdecl() using java_parser.vim to provide quick information. - - Supports input context: "StringLiteral".|, "int.|", "void.|" - 2007-07-28 - - Automatcally compile Reflection.java and place it to $HOME. - - Add option 'javacompiler', default 'javac' - - Add option 'java', default 'java' - -v0.75 2007-02-13 - - Add java_parser.vim. - - Add b:sourcepath option. - - Improve recognition of classes defined in current buffer or in source path. - - Support generating class information from tags instead of returning list directly. - -v0.74 2007-02-03 - - Support jre1.2 (and above). - - Support input context like "boolean.class.|" - - Handle java primitive types like 'int'. - -v0.73 2007-02-01 - - Fix bug that CLASSPATH not used when b:classpath or g:java_classpath not set. - - Fix bug that call filter() without making a copy for incomplete. - - Improve recognition of declaration of this class - -v0.72 2007-01-31 Handle nested expression. -v0.71 2007-01-28 Add Basic support for class in current folder. -v0.70 2007-01-27 Complete the reflection part. -v0.60 2007-01-25 Design TClassInfo, etc. -v0.50 2007-01-21 Use java and Reflection.class directly. - - -6.2 Parser *java-parser-history* - -v0.67 - 2007-09-11 Append a error string to imported qid when error occurs. - 2007-09-10 Improved regexp constants. - 2007-09-07 Fixed type2Str(). Removed qualident2Str(). - -v0.66.1 08-30 Changed classCreatorRest(). -v0.66 08-27 Minor changes - -v0.65 - 2007-08-23 - - Improved s:scanComment(), s:Strpart(), s:String2Flags(). - - Improved recognizing methods, ctors, and variable declarators declared in most common form. - - Added s:optFinalParameter(), s:methodDeclaratorRest_opt(). - - Removed s:GetLine() and s:GetCol(). - - Rewrote binary functions. - -v0.64 - 2007-08-21 - - Added quick recognizing fields or methods declared in most common form. - - Optimized code: s:modeAndEXPR(), formalParameter(), and others. - -v0.63 - 2007-08-10 - - Removed the unclear s:tokens and s:modifier_keywords. - - Add java_parser#GetSnapshot() and java_parser#Restore(). - 2007-08-09 Fixed a bug when no top level class defined - -v0.62 2007-08-08 - 2007-08-08 Fix values in s:Flags and s:modifiersOpt() and the related. - 2007-08-07 Optimize code of scanDoubleQuote() and importDeclaration(). - -v0.61 2007-08-04 - 2007-08-01 Fix a bug typetag(). return a:token -> return tolower(a:token) - 2007-07-31 - - Rename all script functions matching "s:Java_\(\i\+\)" to "s:\1". - - Change s:EOI = '' - - Use get() instead of s:GetOption(). Remove it. - - Use repeat() instead of s:PrependChar(). Remove it. - - Improve scanChar() - -v0.60 2007-07-31 Now it nearly is a complete parser and support Java5,6. - And tested correctly on all java files in jdk6 src.zip. - 2007-07-19 Support new language features in java 5 and above. - 2007-07-25 Add supports for parsing statement, block or expression - 2007-07-28 Place it to autoload directory. - 2007-07-30 Clean this script. - -v0.51 2007-02-13 Optimize several scan function. -v0.50 2007-02-10 Complete the skeleton. - - -6.3 Reflection.java *javacomplete-reflection* - -v0.77 - 2007-09-14 Improved generating information of all packages in jar files. - 2007-09-06 - - Improved getting paths of all system jar files for different JDKs - in different platforms. - 2007-08-14 Major improvement. Support nontoplevel classes. - -v0.76.3 - 2007-08-09 Redefined '-P' option for returning all packages and subpackages info in one time. - -v0.76.2 - 2007-08-06 Return a modifier value as a string because it more than 32bit. - -v0.76 - 2007-08-04 Support checking and reading package members for '-E'. - 2007-08-02 - - Add an option '-E'. - - Use ZipFile and ZipEntry instead of JarFile and JarEntry, - so that it can be compiled by and run on JDK1.1 and above. -v0.7 2007-02-17 - -============================================================================== -7. Todo *javacomplete-todo* - -- Improve performance of the embedded parser. Incremental parser. -- Add quick information using balloonexpr, ballooneval, balloondelay. -- Add javadoc -- Give a hint for class name conflict in different packages. -- Support parameter information for template - -============================================================================== -8. Thanks *javacomplete-thanks* - * Bram Moolenaar and all Vim contributors for Vim - * The insenvim project - * The javac and gjc sources - * All of you for using this script :) - - * For help, documentation, bug report : - Martin Stubenschrott author of IComplete - Vissale NEANG author of OmniCppComplete - David Fishburn author of SQLComplete and others - Nico Weber testing on the Mac - Thomas Link testing on cygwin+bash - Zhixing Yu - -FeedBack: -Any problem, bug or suggest are welcome to send to fangread@yahoo.com.cn - -============================================================================== - vim:tw=78:ts=8:ft=help:norl: diff --git a/files/.vim/doc/lua51refvim.txt b/files/.vim/doc/lua51refvim.txt deleted file mode 100644 index e80d613..0000000 --- a/files/.vim/doc/lua51refvim.txt +++ /dev/null @@ -1,5617 +0,0 @@ -*luarefvim.txt* Lua 5.1 Reference Manual for Vim - Vim version 7.0 - - - *luaref* *Lua-Reference* - Lua Reference for Vim - ========================= - Version 0.2.0 - November, 25th, 2006 - - (c) 2006 by Luis Carvalho - <lexcarvalho at gmail dot com> - - Adapted from "Lua: 5.1 reference manual" - R. Ierusalimschy, L. H. de Figueiredo, W. Celes - Copyright (c) 2006 Lua.org, PUC-Rio. - - - See |lrv-doc| for information on this manual. - See |lrv-copyright| for copyright and licenses. - - - CONTENTS - ============ - - 1 INTRODUCTION........................|lrv-intro| - - 2 THE LANGUAGE........................|lrv-language| - 2.1 Lexical Conventions...............|lrv-langLexConv| - 2.2 Values and Types..................|lrv-langValTypes| - 2.2.1 Coercion........................|lrv-langCoercion| - 2.3 Variables.........................|lrv-langVariables| - 2.4 Statements........................|lrv-langStats| - 2.4.1 Chunks..........................|lrv-langChunks| - 2.4.2 Blocks..........................|lrv-langBlocks| - 2.4.3 Assignment......................|lrv-langAssign| - 2.4.4 Control Structures..............|lrv-langContStructs| - 2.4.5 For Statement...................|lrv-langForStat| - 2.4.6 Function Calls as Statements....|lrv-langFuncStat| - 2.4.7 Local Declarations..............|lrv-langLocalDec| - 2.5 Expressions.......................|lrv-langExpressions| - 2.5.1 Arithmetic Operators............|lrv-langArithOp| - 2.5.2 Relational Operators............|lrv-langRelOp| - 2.5.3 Logical Operators...............|lrv-langLogOp| - 2.5.4 Concatenation...................|lrv-langConcat| - 2.5.5 The Length Operator.............|lrv-langLength| - 2.5.6 Precedence......................|lrv-langPrec| - 2.5.7 Table Constructors..............|lrv-langTableConst| - 2.5.8 Function Calls..................|lrv-langFuncCalls| - 2.5.9 Function Definitions............|lrv-langFuncDefs| - 2.6 Visibility Rules..................|lrv-langVisibRules| - 2.7 Error Handling....................|lrv-langError| - 2.8 Metatables........................|lrv-langMetatables| - 2.9 Environments......................|lrv-langEnvironments| - 2.10 Garbage Collection...............|lrv-langGC| - 2.10.1 Garbage-Collection Metamethods.|lrv-langGCMeta| - 2.10.2 Weak Tables....................|lrv-langWeaktables| - 2.11 Coroutines.......................|lrv-langCoro| - - 3 THE APPLICATION PROGRAM INTERFACE...|lrv-api| - 3.1 The Stack.........................|lrv-apiStack| - 3.2 Stack Size........................|lrv-apiStackSize| - 3.3 Pseudo-Indices....................|lrv-apiPseudoIndices| - 3.4 C Closures........................|lrv-apiCClosures| - 3.5 Registry..........................|lrv-apiRegistry| - 3.6 Error Handling in C...............|lrv-apiError| - 3.7 Functions and Types...............|lrv-apiFunctions| - 3.8 The Debug Interface...............|lrv-apiDebug| - - 4 THE AUXILIARY LIBRARY...............|lrv-aux| - 4.1 Functions and Types...............|lrv-auxFunctions| - - 5 STANDARD LIBRARIES..................|lrv-lib| - 5.1 Basic Functions...................|lrv-libBasic| - 5.2 Coroutine Manipulation............|lrv-libCoro| - 5.3 Modules...........................|lrv-libModule| - 5.4 String Manipulation...............|lrv-libString| - 5.4.1 Patterns........................|lrv-libStringPat| - 5.5 Table Manipulation................|lrv-libTable| - 5.6 Mathematical Functions............|lrv-libMath| - 5.7 Input and Output Facilities.......|lrv-libIO| - 5.8 Operating System Facilities.......|lrv-libOS| - 5.9 The Debug Library.................|lrv-libDebug| - - 6 LUA STAND-ALONE.....................|lrv-LuaSA| - - A INDEX...............................|lrv-index| - B BIBLIOGRAPHY........................|lrv-bibliography| - C COPYRIGHT & LICENSES................|lrv-copyright| - D LUAREFVIM DOC.......................|lrv-doc| - D.1 Installation.......................|lrv-docInstall| - D.2 Usage..............................|lrv-docUsage| - - -============================================================================== -1 INTRODUCTION *lrv-intro* -============================================================================== - -Lua is an extension programming language designed to support general -procedural programming with data description facilities. It also offers good -support for object-oriented programming, functional programming, and -data-driven programming. Lua is intended to be used as a powerful, -light-weight scripting language for any program that needs one. Lua is -implemented as a library, written in@clean@C (that is, in the common subset -of ANSI C and C++). - -Being an extension language, Lua has no notion of a "main" program: it only -works@embedded@in a host client, called the@embedding program@or simply -the@host@. This host program can invoke functions to execute a piece of Lua -code, can write and read Lua variables, and can register C functions to be -called by Lua code. Through the use of C functions, Lua can be augmented to -cope with a wide range of different domains, thus creating customized -programming languages sharing a syntactical framework. - -The Lua distribution includes a sample host program called$lua$, which uses -the Lua library to offer a complete, stand-alone Lua interpreter. - -Lua is free software, and is provided as usual with no guarantees, as stated -in its license. The implementation described in this manual is available at -Lua's official web site,$www.lua.org$. - -Like any other reference manual, this document is dry in places. For a -discussion of the decisions behind the design of Lua, see references at -|lrv-bibliography|. For a detailed introduction to programming in Lua, see -Roberto's book,@Programming in Lua@. - -Lua means "moon" in Portuguese and is pronounced LOO-ah. - - -============================================================================== -2 THE LANGUAGE *lrv-language* -============================================================================== - -This section describes the lexis, the syntax, and the semantics of Lua. In -other words, this section describes which tokens are valid, how they can be -combined, and what their combinations mean. - -The language constructs will be explained using the usual extended BNF -notation, in which {@a@} means 0 or more@a@'s, and [@a@] means an optional@a@. -Non-terminals are shown in@italics@, keywords are shown in#bold#, and other -terminal symbols are shown in$typewriter$color, enclosed in single quotes. - - -============================================================================== -2.1 Lexical Conventions *lrv-langLexConv* - - - *lrv-names* *lrv-identifiers* -@Names@(also called@identifiers@) in Lua can be any string of letters, digits, -and underscores, not beginning with a digit. This coincides with the -definition of identifiers in most languages. (The definition of letter depends -on the current locale: any character considered alphabetic by the current -locale can be used in an identifier.) Identifiers are used to name variables -and table fields. - -The following@keywords@are reserved and cannot be used as names: -> - and break do else elseif - end false for function if - in local nil not or - repeat return then true until while -< -Lua is a case-sensitive language:$and$is a reserved word, but$And$and$AND$are -two different, valid names. As a convention, names starting with an underscore -followed by uppercase letters (such as$_VERSION$) are reserved for internal -global variables used by Lua. - -The following strings denote other tokens: -> - + - * / % ^ # - == ~= <= >= < > = - ( ) { } [ ] - ; : , . .. ... -> - *lrv-literal* -@Literal strings@can be delimited by matching single or double quotes, and can -contain the following C-like escape sequences: - - #o#$\a$: bell - #o#$\b$: backspace - #o#$\f$: form feed - #o#$\n$: newline - #o#$\r$: carriage return - #o#$\t$: horizontal tab - #o#$\v$: vertical tab - #o#$\\$: backslash - #o#$\"$: quotation mark (double quote) - #o#$\'$: apostrophe (single quote) - -Moreover, a backslash followed by a real newline results in a newline in the -string. A character in a string may also be specified by its numerical value -using the escape sequence$`\ddd'$, where@ddd@is a sequence of up to three -decimal digits. (Note that if a numerical escape is to be followed by a digit, -it must be expressed using exactly three digits.) Strings in Lua may contain -any 8-bit value, including embedded zeros, which can be specified as$`\0'$. - -To put a double (single) quote, a newline, a backslash, or an embedded zero -inside a literal string enclosed by double (single) quotes you must use an -escape sequence. Any other character may be directly inserted into the -literal. (Some control characters may cause problems for the file system, but -Lua has no problem with them.) - -Literal strings can also be defined using a long format enclosed by -@long brackets@. We define an@opening long bracket of level n@as an opening -square bracket followed by@n@ equal signs followed by another opening square -bracket. So, an opening long bracket of level 0 is written as$[[$, an opening -long bracket of level 1 is written as$[=[$, and so on. -A@closing long bracket@is defined similarly; for instance, a closing long -bracket of level 4 is written as$]====]$. A long string starts with an opening -long bracket of any level and ends at the first closing long bracket of the -same level. Literals in this bracketed form may run for several lines, do not -interpret any escape sequences, and ignore long brackets of any other level. -They may contain anything except a closing bracket of the proper level. - -For convenience, when the opening long bracket is immediately followed by a -newline, the newline is not included in the string. As an example, in a system -using ASCII (in which$`a'$is coded as 97, newline is coded as 10, and $`1'$is -coded as 49), the five literals below denote the same string: -> - a = 'alo\n123"' - a = "alo\n123\"" - a = '\97lo\10\04923"' - a = [[alo - 123"]] - a = [==[ - alo - 123"]==] -> - *lrv-numconstant* -A@numerical constant@may be written with an optional decimal part and an -optional decimal exponent. Lua also accepts integer hexadecimal constants, by -prefixing them with$0x$. Examples of valid numerical constants are -> - 3 3.0 3.1416 314.16e-2 0.31416E1 0xff 0x56 -> - *lrv-comment* -A@comment@starts with a double hyphen ($--$) anywhere outside a string. If the -text immediately after$--$is not an opening long bracket, the comment is -a@short comment@, which runs until the end of the line. Otherwise, it is -a@long comment@, which runs until the corresponding closing long bracket. Long -comments are frequently used to disable code temporarily. - -============================================================================== -2.2 Values and Types *lrv-langValTypes* - - -Lua is a@dynamically typed language@. This means that variables do not have -types; only values do. There are no type definitions in the language. All -values carry their own type. - -All values in Lua are@first-class values@. This means that all values can be -stored in variables, passed as arguments to other functions, and returned as -results. - - *lrv-types* *lrv-nil* *lrv-true* *lrv-false* *lrv-number* *lrv-string* -There are eight basic types in Lua:@nil@,@boolean@,@number@,@string@, -@function@,@userdata@,@thread@, and@table@.@Nil@is the type of the value#nil#, -whose main property is to be different from any other value; it usually -represents the absence of a useful value.@Boolean@is the type of the -values#false#and#true#. Both#nil#and#false#make a condition false; any other -value makes it true.@Number@represents real (double-precision floating-point) -numbers. (It is easy to build Lua interpreters that use other internal -representations for numbers, such as single-precision float or long -integers; see file$luaconf.h$.)@String@represents arrays of characters. Lua is -8-bit clean: strings may contain any 8-bit character, including embedded zeros -($'\0'$) (see |lrv-literal|). - -Lua can call (and manipulate) functions written in Lua and functions written -in C (see |lrv-langFuncCalls|). - - *lrv-userdatatype* -The type@userdata@is provided to allow arbitrary C data to be stored in Lua -variables. This type corresponds to a block of raw memory and has no -pre-defined operations in Lua, except assignment and identity test. However, -by using@metatables@, the programmer can define operations for userdata values -(see |lrv-langMetatables|). Userdata values cannot be created or modified in -Lua, only through the C API. This guarantees the integrity of data owned by -the host program. - - *lrv-thread* -The type@thread@represents independent threads of execution and it is used to -implement coroutines (see |lrv-langCoro|). Do not confuse Lua threads with -operating-system threads. Lua supports coroutines on all systems, even those -that do not support threads. - - *lrv-table* -The type@table@implements associative arrays, that is, arrays that can be -indexed not only with numbers, but with any value (except#nil#). Tables can -be@heterogeneous@; that is, they can contain values of all types -(except#nil#). Tables are the sole data structuring mechanism in Lua; they may -be used to represent ordinary arrays, symbol tables, sets, records, graphs, -trees, etc. To represent records, Lua uses the field name as an index. The -language supports this representation by providing$a.name$as syntactic sugar -for$a["name"]$. There are several convenient ways to create tables in Lua (see -|lrv-langTableConst|). - -Like indices, the value of a table field can be of any type (except#nil#). In -particular, because functions are first-class values, table fields may contain -functions. Thus tables may also carry@methods@(see |lrv-langFuncDefs|). - -Tables, functions, threads and (full) userdata values are@objects@: variables -do not actually@contain@these values, only@references@to them. Assignment, -parameter passing, and function returns always manipulate references to such -values; these operations do not imply any kind of copy. - -The library function$type$returns a string describing the type of a given -value (see |lrv-type|). - - ------------------------------------------------------------------------------- -2.2.1 Coercion *lrv-langCoercion* - -Lua provides automatic conversion between string and number values at run -time. Any arithmetic operation applied to a string tries to convert that -string to a number, following the usual conversion rules. Conversely, whenever -a number is used where a string is expected, the number is converted to a -string, in a reasonable format. For complete control of how numbers are -converted to strings, use the$format$function from the string library (see -|lrv-string.format|). - - -============================================================================== -2.3 Variables *lrv-langVariables* - - -Variables are places that store values. There are three kinds of variables in -Lua: global variables, local variables, and table fields. - -A single name can denote a global variable or a local variable (or a -function's formal parameter, which is a particular form of local variable): -> - var ::= Name -> -Name denotes identifiers, as defined in |lrv-langLexConv|. - -Any variable is assumed to be global unless explicitly declared as a local -(see |lrv-langLocalDec|). Local variables are@lexically scoped@: local -variables can be freely accessed by functions defined inside their scope (see -|lrv-langVisibRules|). - -Before the first assignment to a variable, its value is#nil#. - -Square brackets are used to index a table: - - $var ::= prefixexp$#`['#$exp$#`]'# - -The first expression (@prefixexp@) should result in a table value; the second -expression (@exp@) identifies a specific entry inside that table. The -expression denoting the table to be indexed has a restricted syntax; see -|lrv-langExpressions| for details. - -The syntax$var.NAME$is just syntactic sugar for$var["NAME"]$: - - $var ::= prefixexp$#`.'#$Name$ - -All global variables live as fields in ordinary Lua tables, called -@environment tables@or simply@environments@(see |lrv-langEnvironments|). -Each function has its own reference to an environment, so that all global -variables in this function will refer to this environment table. When a -function is created, it inherits the environment from the function that -created it. To get the environment table of a Lua function, you -call$getfenv$(see |lrv-getfenv|). To replace it, you call$setfenv$(see -|lrv-setfenv|). (You can only manipulate the environment of C functions -through the debug library; see |lrv-libDebug|.) - -An access to a global variable$x$is equivalent to$_env.x$, which in turn is -equivalent to -> - gettable_event(_env, "x") -> -where$_env$is the environment of the running function. (The$_env$variable is -not defined in Lua. We use it here only for explanatory purposes.) - -The meaning of accesses to global variables and table fields can be changed -via metatables. An access to an indexed variable$t[i]$is equivalent to a -call$gettable_event(t,i)$. (See |lrv-langMetatables| for a complete -description of the$gettable_event$function. This function is not defined or -callable in Lua. We use it here only for explanatory purposes.) - - -============================================================================== -2.4 Statements *lrv-langStats* - - -Lua supports an almost conventional set of statements, similar to those in -Pascal or C. This set includes assignment, control structures, function -calls, and variable declarations. - - ------------------------------------------------------------------------------- -2.4.1 Chunks *lrv-chunk* *lrv-langChunks* - - -The unit of execution of Lua is called a@chunk@. A chunk is simply a sequence -of statements, which are executed sequentially. Each statement can be -optionally followed by a semicolon: - - $chunk ::= {stat [$#`;'#$]}$ - -There are no empty statements and thus$`;;'$is not legal. - -Lua handles a chunk as the body of an anonymous function with a variable -number of arguments (see |lrv-langFuncDefs|). As such, chunks can define local -variables, receive arguments, and return values. - -A chunk may be stored in a file or in a string inside the host program. When a -chunk is executed, first it is pre-compiled into instructions for a virtual -machine, and then the compiled code is executed by an interpreter for the -virtual machine. - -Chunks may also be pre-compiled into binary form; see program$luac$for -details. Programs in source and compiled forms are interchangeable; Lua -automatically detects the file type and acts accordingly. - - ------------------------------------------------------------------------------- -2.4.2 Blocks *lrv-block* *lrv-langBlocks* - - -A block is a list of statements; syntactically, a block is the same as a -chunk: -> - block ::= chunk -> - *lrv-do* *lrv-end* -A block may be explicitly delimited to produce a single statement: - - $stat ::=$#do#$block$#end# - -Explicit blocks are useful to control the scope of variable declarations. -Explicit blocks are also sometimes used to add a#return#or#break#statement in -the middle of another block (see |lrv-langContStructs|). - - ------------------------------------------------------------------------------- -2.4.3 Assignment *lrv-langAssign* - - -Lua allows multiple assignment. Therefore, the syntax for assignment defines a -list of variables on the left side and a list of expressions on the right -side. The elements in both lists are separated by commas: - - $stat ::= varlist1$#`='#$explist1$ - $varlist1 ::= var {$#`,'#$var }$ - $explist1 ::= exp {$#`,'#$exp }$ - -Expressions are discussed in |lrv-langExpressions|. - -Before the assignment, the list of values is@adjusted@to the length of the -list of variables. If there are more values than needed, the excess values are -thrown away. If there are fewer values than needed, the list is extended with -as many#nil#'s as needed. If the list of expressions ends with a function -call, then all values returned by this call enter in the list of values, -before the adjustment (except when the call is enclosed in parentheses; see -|lrv-langExpressions|). - -The assignment statement first evaluates all its expressions and only then are -the assignments performed. Thus the code -> - i = 3 - i, a[i] = i+1, 20 -> -sets$a[3]$to 20, without affecting$a[4]$because the$i$in$a[i]$is evaluated (to -3) before it is assigned 4. Similarly, the line -> - x, y = y, x -> -exchanges the values of$x$and$y$. - -The meaning of assignments to global variables and table fields can be changed -via metatables. An assignment to an indexed variable$t[i] = val$is equivalent -to$settable_event(t,i,val)$. (See |lrv-langMetatables| for a complete -description of the$settable_event$function. This function is not defined or -callable in Lua. We use it here only for explanatory purposes.) - -An assignment to a global variable$x = val$is equivalent to the -assignment$_env.x = val$, which in turn is equivalent to -> - settable_event(_env, "x", val) -> -where$_env$is the environment of the running function. (The$_env$variable is -not defined in Lua. We use it here only for explanatory purposes.) - - ------------------------------------------------------------------------------- -2.4.4 Control Structures *lrv-langContStructs* - - *lrv-if* *lrv-then* *lrv-else* *lrv-elseif* - *lrv-while* *lrv-repeat* *lrv-until* -The control structures#if#,#while#, and#repeat#have the usual meaning and -familiar syntax: - - $stat ::=$#while#$exp$#do#$block$#end# - $stat ::=$#repeat#$block$#until#$exp$ - $stat ::=$#if#$exp$#then#$block {$#elseif#$exp$#then#$block }$ - $[$#else#$block ]$#end# - -Lua also has a#for#statement, in two flavors (see |lrv-langForStat|). - -The condition expression of a control structure may return any value. -Both#false#and#nil#are considered false. All values different -from#nil#and#false#are considered true (in particular, the number 0 and the -empty string are also true). - -In the#repeat-until#loop, the inner block does not end at the#until#keyword, -but only after the condition. So, the condition can refer to local variables -declared inside the loop block. - - *lrv-return* -The#return#statement is used to return values from a function or a chunk -(which is just a function). Functions and chunks may return more than one -value, so the syntax for the#return#statement is - - $stat ::=$#return#$[explist1]$ - - *lrv-break* -The#break#statement is used to terminate the execution of a#while#,#repeat#, -or#for#loop, skipping to the next statement after the loop: - - $stat ::=$#break# - -A#break#ends the innermost enclosing loop. - -The#return#and#break#statements can only be written as the@last@statement of a -block. If it is really necessary to#return#or#break#in the middle of a block, -then an explicit inner block can be used, as in the idioms -$`do return end'$and$`do break end'$, because now#return#and#break#are the -last statements in their (inner) blocks. - - ------------------------------------------------------------------------------- -2.4.5 For Statement *lrv-for* *lrv-langForStat* - - -The#for#statement has two forms: one numeric and one generic. - -The numeric#for#loop repeats a block of code while a control variable runs -through an arithmetic progression. It has the following syntax: - - $stat ::=$#for#$Name$#`='#$exp$#`,'#$exp [$#`,'#$exp ]$#do#$block$#end# - -The@block@is repeated for@name@starting at the value of the first@exp@, until -it passes the second@exp@by steps of the third@exp@. More precisely, -a#for#statement like - - $for var =$@e1, e2, e3@$do$@block@$end$ - -is equivalent to the code: - - $do$ - $local$@var, limit, step@$= tonumber(e1), tonumber(e2), tonumber(e3)$ - $if not ($@var@$and$@limit@$and$@step@$) then error() end$ - $while ($@step@$>0 and$@var@$<=$@limit@$)$ - $or ($@step@$<=0 and$@var@$>=$@limit@$) do$ - $block$ - @var@$=$@var@$+$@step@ - $end$ - $end$ - -Note the following: - - #o#All three control expressions are evaluated only once, before the loop - starts. They must all result in numbers. - #o#@var@,@limit@and@step@are invisible variables. The names are here for - explanatory purposes only. - #o#If the third expression (the step) is absent, then a step of 1 is used. - #o#You can use#break#to exit a#for#loop. - #o#The loop variable$var$is local to the loop; you cannot use its value - after the#for#ends or is broken. If you need this value, assign it to - another variable before breaking or exiting the loop. - - *lrv-in* -The generic#for#statement works over functions, called@iterators@. On each -iteration, the iterator function is called to produce a new value, stopping -when this new value is#nil#. The generic#for#loop has the following syntax: - - $stat ::=$#for#$namelist$#in#$explist1$#do#$block$#end# - $namelist ::= Name {$#`,'#$Name }$ - -A#for#statement like - - $for$@var1, ..., varn@$in$@explist@$do$@block@$end$ - -is equivalent to the code: - - $do$ - $local$@f, s, var@$=$@explist@ - $while true do$ - $local$@var1, ..., varn@$=$@f(s, var)@ - @var@$=$@var1@ - $if$@var@$== nil then break end$ - @block@ - $end$ - $end$ - -Note the following: - - #o#@explist@is evaluated only once. Its results are an@iterator@function, - a@state@, and an initial value for the first@iterator variable@. - #o#@f@,@s@, and@var@are invisible variables. The names are here for - explanatory purposes only. - #o#You can use#break#to exit a#for#loop. - #o#The loop variables@var1, ..., varn@are local to the loop; you cannot use - their values after the#for#ends. If you need these values, then assign - them to other variables before breaking or exiting the loop. - - ------------------------------------------------------------------------------- -2.4.6 Function Calls as Statements *lrv-langFuncStat* - - -To allow possible side-effects, function calls can be executed as statements: -> - stat ::= functioncall -> -In this case, all returned values are thrown away. Function calls are -explained in |lrv-langFuncCalls|. - - ------------------------------------------------------------------------------- -2.4.7 Local Declarations *lrv-local* *lrv-langLocalDec* - - -Local variables may be declared anywhere inside a block. The declaration may -include an initial assignment: - - $stat ::=$#local#$namelist [$#`='#$explist1 ]$ - $namelist ::= Name {$#`,'#$Name }$ - -If present, an initial assignment has the same semantics of a multiple -assignment (see |lrv-langAssign|). Otherwise, all variables are initialized -with#nil#. - -A chunk is also a block (see |lrv-langChunks|), and so local variables can be -declared in a chunk outside any explicit block. The scope of such local -variables extends until the end of the chunk. - -The visibility rules for local variables are explained in -|lrv-langVisibRules|. - - -============================================================================== -2.5 Expressions *lrv-langExpressions* - - -The basic expressions in Lua are the following: - - $exp ::= prefixexp$ - $exp ::=$#nil#$|$#false#$|$#true# - $exp ::= Number$ - $exp ::= String$ - $exp ::= function$ - $exp ::= tableconstructor$ - $exp ::=$#`...'# - $exp ::= exp binop exp$ - $exp ::= unop exp$ - $prefixexp ::= var | functioncall |$#`('#$exp$#`)'# - -Numbers and literal strings are explained in |lrv-langLexConv|; variables are -explained in |lrv-langVariables|; function definitions are explained in -|lrv-langFuncDefs|; function calls are explained in |lrv-langFuncCalls|; -table constructors are explained in |lrv-langTableConst|. Vararg expressions, -denoted by three dots ($`...'$), can only be used inside vararg functions; -they are explained in |lrv-langFuncDefs|. - -Binary operators comprise arithmetic operators (see |lrv-langArithOp|), -relational operators (see |lrv-langRelOp|), logical operators (see -|lrv-langLogOp|), and the concatenation operator (see |lrv-langConcat|). -Unary operators comprise the unary minus (see |lrv-labgArithOp|), the unary -#not# (see |lrv-langLogOp|), and the unary@length operator@(see -|lrv-langLength|). - -Both function calls and vararg expressions may result in multiple values. If -the expression is used as a statement (see |lrv-langFuncStat|) -(only possible for function calls), then its return list is adjusted to zero -elements, thus discarding all returned values. If the expression is used as -the last (or the only) element of a list of expressions, then no adjustment is -made (unless the call is enclosed in parentheses). In all other contexts, Lua -adjusts the result list to one element, discarding all values except the first -one. - -Here are some examples: -> - f() -- adjusted to 0 results - g(f(), x) -- f() is adjusted to 1 result - g(x, f()) -- g gets x plus all results from f() - a,b,c = f(), x -- f() is adjusted to 1 result (c gets nil) - a,b = ... -- a gets the first vararg parameter, b gets - -- the second (both a and b may get nil if there - -- is no corresponding vararg parameter) - - a,b,c = x, f() -- f() is adjusted to 2 results - a,b,c = f() -- f() is adjusted to 3 results - return f() -- returns all results from f() - return ... -- returns all received vararg parameters - return x,y,f() -- returns x, y, and all results from f() - {f()} -- creates a list with all results from f() - {...} -- creates a list with all vararg parameters - {f(), nil} -- f() is adjusted to 1 result -> -An expression enclosed in parentheses always results in only one value. Thus, -$(f(x,y,z))$is always a single value, even if$f$returns several values. -(The value of$(f(x,y,z))$is the first value returned by$f$or#nil#if$f$does not -return any values.) - - ------------------------------------------------------------------------------- -2.5.1 Arithmetic Operators *lrv-langArithOp* - - -Lua supports the usual arithmetic operators: the binary$+$(addition), -$-$(subtraction),$*$(multiplication),$/$(division),$%$(modulo) -and$^$(exponentiation); and unary$-$(negation). If the operands are numbers, -or strings that can be converted to numbers (see |lrv-langCoercion|), then all -operations have the usual meaning. Exponentiation works for any exponent. For -instance,$x^(-0.5)$computes the inverse of the square root of$x$. Modulo is -defined as -> - a % b == a - math.floor(a/b)*b -> -That is, it is the remainder of a division that rounds the quotient towards -minus infinity. - - ------------------------------------------------------------------------------- -2.5.2 Relational Operators *lrv-langRelOp* - - -The relational operators in Lua are -> - == ~= < > <= >= -> -These operators always result in#false#or#true#. - -Equality ($==$) first compares the type of its operands. If the types are -different, then the result is#false#. Otherwise, the values of the operands -are compared. Numbers and strings are compared in the usual way. Objects -(tables, userdata, threads, and functions) are compared by@reference@: two -objects are considered equal only if they are the@same@object. Every time you -create a new object (a table, userdata, or function), this new object is -different from any previously existing object. - -You can change the way that Lua compares tables and userdata using the "eq" -metamethod (see |lrv-langMetatables|). - -The conversion rules of coercion |lrv-langCoercion|@do not@apply to equality -comparisons. Thus,$"0"==0$evaluates to#false#, and$t[0]$and$t["0"]$denote -different entries in a table. - -The operator$~=$is exactly the negation of equality ($==$). - -The order operators work as follows. If both arguments are numbers, then they -are compared as such. Otherwise, if both arguments are strings, then their -values are compared according to the current locale. Otherwise, Lua tries to -call the "lt" or the "le" metamethod (see |lrv-langMetatables|). - - ------------------------------------------------------------------------------- -2.5.3 Logical Operators *lrv-langLogOp* - - -The logical operators in Lua are -> - and or not -> -Like the control structures (see |lrv-langContStructs|), all logical operators -consider both#false#and#nil#as false and anything else as true. - - *lrv-not* *lrv-and* *lrv-or* -The negation operator#not#always returns#false#or#true#. The conjunction -operator#and#returns its first argument if this value is#false#or#nil#; -otherwise,#and#returns its second argument. The disjunction -operator#or#returns its first argument if this value is different -from#nil#and#false#; otherwise,#or#returns its second argument. -Both#and#and#or#use short-cut evaluation, that is, the second operand is -evaluated only if necessary. Here are some examples: -> - 10 or 20 --> 10 - 10 or error() --> 10 - nil or "a" --> "a" - nil and 10 --> nil - false and error() --> false - false and nil --> false - false or nil --> nil - 10 and 20 --> 20 -> -(In this manual,$-->$indicates the result of the preceding expression.) - - ------------------------------------------------------------------------------- -2.5.4 Concatenation *lrv-langConcat* - - -The string concatenation operator in Lua is denoted by two dots ($`..'$). -If both operands are strings or numbers, then they are converted to strings -according to the rules mentioned in |lrv-langCoercion|. Otherwise, the -"concat" metamethod is called (see |lrv-langMetatables|). - - ------------------------------------------------------------------------------- -2.5.5 The Length Operator *lrv-langLength* - - -The length operator is denoted by the unary operator$#$. The length of a -string is its number of bytes (that is, the usual meaning of string length -when each character is one byte). - -The length of a table$t$is defined to be any integer index$n$such that$t[n]$is -not#nil#and$t[n+1]$is#nil#; moreover, if$t[1]$is#nil#,$n$may be zero. For a -regular array, with non-nil values from 1 to a given$n$, its length is exactly -that$n$, the index of its last value. If the array has "holes" (that -is,#nil#values between other non-nil values), then$#t$may be any of the -indices that directly precedes a#nil#value (that is, it may consider any -such#nil#value as the end of the array). - - ------------------------------------------------------------------------------- -2.5.6 Precedence *lrv-langPrec* - - -Operator precedence in Lua follows the table below, from lower to higher -priority: -> - or - and - < > <= >= ~= == - .. - + - - * / - not # - (unary) - ^ -> -As usual, you can use parentheses to change the precedences in an expression. -The concatenation ($`..'$) and exponentiation ($`^'$) operators are right -associative. All other binary operators are left associative. - - ------------------------------------------------------------------------------- -2.5.7 Table Constructors *lrv-langTableConst* - - -Table constructors are expressions that create tables. Every time a -constructor is evaluated, a new table is created. Constructors can be used to -create empty tables, or to create a table and initialize some of its fields. -The general syntax for constructors is - - $tableconstructor ::=$#`{'#$[ fieldlist ]$#`}'# - $fieldlist ::= field { fieldsep field } [ fieldsep ]$ - $field ::=$#`['#$exp$#`]' `='#$exp | Name$#`='#$exp | exp$ - $fieldsep ::=$ #`,'#$|$ #`;'# - -Each field of the form$[exp1] = exp2$adds to the new table an entry with -key$exp1$and value$exp2$. A field of the form$name = exp$is equivalent to -$["name"] = exp$. Finally, fields of the form$exp$are equivalent to -$[i] = exp$, where$i$are consecutive numerical integers, starting with 1. -Fields in the other formats do not affect this counting. For example, -> - a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } -> -is equivalent to -> - do - local t = {} - t[f(1)] = g - t[1] = "x" -- 1st exp - t[2] = "y" -- 2nd exp - t.x = 1 -- temp["x"] = 1 - t[3] = f(x) -- 3rd exp - t[30] = 23 - t[4] = 45 -- 4th exp - a = t - end -> -If the last field in the list has the form$exp$and the expression is a -function call, then all values returned by the call enter the list -consecutively (see |lrv-langFuncCalls|). To avoid this, enclose the function -call in parentheses (see |lrv-langExpressions|). - -The field list may have an optional trailing separator, as a convenience for -machine-generated code. - - ------------------------------------------------------------------------------- -2.5.8 Function Calls *lrv-function* *lrv-langFuncCalls* - - -A function call in Lua has the following syntax: -> - functioncall ::= prefixexp args -> -In a function call, first@prefixexp@and@args@are evaluated. If the value -of@prefixexp@has type@function@, then this function is called with the given -arguments. Otherwise, the@prefixexp@"call" metamethod is called, having as -first parameter the value of@prefixexp@, followed by the original call -arguments (see |lrv-langMetatables|). - -The form - - $functioncall ::= prefixexp$#`:'#$Name args$ - -can be used to call "methods". A call$v:name($@args@$)$is syntactic sugar -for$v.name(v,$@args@$)$, except that$v$is evaluated only once. - -Arguments have the following syntax: - - $args ::= $#`('#$[ explist1 ]$#`)'# - $args ::= tableconstructor$ - $args ::= String$ - -All argument expressions are evaluated before the call. A call of the -form$f{$@fields@$}$is syntactic sugar for $f({$@fields@$})$, that is, the -argument list is a single new table. A call of the form$f'$@string@$'$ -(or$f"$@string@$"$or$f[[$@string@$]]$) is syntactic sugar for -$f('$@string@$')$, that is, the argument list is a single literal string. - -As an exception to the free-format syntax of Lua, you cannot put a line break -before the$'('$ in a function call. This restriction avoids some ambiguities -in the language. If you write -> - a = f - (g).x(a) -> -Lua would see that as a single statement,$a = f(g).x(a)$. So, if you want two -statements, you must add a semi-colon between them. If you actually want to -call$f$, you must remove the line break before$(g)$. - - *lrv-tailcall* -A call of the form$return$@functioncall@is called a@tail call@. Lua -implements@proper tail calls@(or@proper tail recursion@): in a tail call, the -called function reuses the stack entry of the calling function. Therefore, -there is no limit on the number of nested tail calls that a program can -execute. However, a tail call erases any debug information about the calling -function. Note that a tail call only happens with a particular syntax, where -the#return#has one single function call as argument; this syntax makes the -calling function return exactly the returns of the called function. So, none -of the following examples are tail calls: -> - return (f(x)) -- results adjusted to 1 - return 2 * f(x) - return x, f(x) -- additional results - f(x); return -- results discarded - return x or f(x) -- results adjusted to 1 -> - ------------------------------------------------------------------------------- -2.5.9 Function Definitions *lrv-langFuncDefs* - - -The syntax for function definition is - - $function ::=$#function#$funcbody$ - $funcbody ::=$#`('#$[ parlist1 ]$#`)'#$block$#end# - -The following syntactic sugar simplifies function definitions: - - $stat ::=$#function#$funcname funcbody$ - $stat ::=$#local function#$Name funcbody$ - $funcname ::= Name {$#`.'#$Name } [$#`:'#$Name ]$ - -The statement - - $function f ()$@body@$end$ - -translates to - - $f = function ()$@body@$end$ - -The statement - - $function t.a.b.c.f ()$@body@$end$ - -translates to - - $t.a.b.c.f = function ()$@body@$end$ - -The statement - - $local function f ()$@body@$end$ - -translates to - - $local f; f = function f ()$@body@$end$ - -@not@to - - $local f = function f ()$@body@$end$ - -(This only makes a difference when the body of the function contains -references to$f$.) - - *lrv-closure* -A function definition is an executable expression, whose value has -type@function@. When Lua pre-compiles a chunk, all its function bodies are -pre-compiled too. Then, whenever Lua executes the function definition, the -function is@instantiated@(or@closed@). This function instance (or@closure@) -is the final value of the expression. Different instances of the same -function may refer to different external local variables and may have -different environment tables. - -Parameters act as local variables that are initialized with the argument -values: - - $parlist1 ::= namelist [$#`,' `...'#$] |$#`...'# - - *lrv-vararg* -When a function is called, the list of arguments is adjusted to the length of -the list of parameters, unless the function is a variadic or@vararg function@, -which is indicated by three dots ($`...'$) at the end of its parameter list. -A vararg function does not adjust its argument list; instead, it collects all -extra arguments and supplies them to the function through a@vararg expression@, -which is also written as three dots. The value of this expression is a list of -all actual extra arguments, similar to a function with multiple results. If a -vararg expression is used inside another expression or in the middle of a list -of expressions, then its return list is adjusted to one element. If the -expression is used as the last element of a list of expressions, then no -adjustment is made (unless the call is enclosed in parentheses). - -As an example, consider the following definitions: -> - function f(a, b) end - function g(a, b, ...) end - function r() return 1,2,3 end -> -Then, we have the following mapping from arguments to parameters and to the -vararg expression: -> - CALL PARAMETERS - - f(3) a=3, b=nil - f(3, 4) a=3, b=4 - f(3, 4, 5) a=3, b=4 - f(r(), 10) a=1, b=10 - f(r()) a=1, b=2 - - g(3) a=3, b=nil, ... --> (nothing) - g(3, 4) a=3, b=4, ... --> (nothing) - g(3, 4, 5, 8) a=3, b=4, ... --> 5 8 - g(5, r()) a=5, b=1, ... --> 2 3 -> -Results are returned using the#return#statement (see |lrv-langContStructs|). -If control reaches the end of a function without encountering -a#return#statement, then the function returns with no results. - - *lrv-colonsyntax* -The@colon@syntax is used for defining@methods@, that is, functions that have -an implicit extra parameter$self$. Thus, the statement - - $function t.a.b.c:f ($@params@$)$@body@$end$ - -is syntactic sugar for - - $t.a.b.c:f = function (self, ($@params@$)$@body@$end$ - - -============================================================================== -2.6 Visibility Rules *lrv-langVisibRules* - - -Lua is a lexically scoped language. The scope of variables begins at the -first statement@after@their declaration and lasts until the end of the -innermost block that includes the declaration. Consider the following example: -> - x = 10 -- global variable - do -- new block - local x = x -- new `x', with value 10 - print(x) --> 10 - x = x+1 - do -- another block - local x = x+1 -- another `x' - print(x) --> 12 - end - print(x) --> 11 - end - print(x) --> 10 (the global one) -> -Notice that, in a declaration like$local x = x$, the new$x$being declared is -not in scope yet, and so the second$x$refers to the outside variable. - - *lrv-upvalue* -Because of the lexical scoping rules, local variables can be freely accessed -by functions defined inside their scope. A local variable used by an inner -function is called an@upvalue@, or@external local variable@, inside the inner -function. - -Notice that each execution of a#local#statement defines new local variables. -Consider the following example: -> - a = {} - local x = 20 - for i=1,10 do - local y = 0 - a[i] = function () y=y+1; return x+y end - end -> -The loop creates ten closures (that is, ten instances of the anonymous -function). Each of these closures uses a different$y$variable, while all of -them share the same$x$. - - -============================================================================== -2.7 Error Handling *lrv-langError* - - -Because Lua is an embedded extension language, all Lua actions start from -C code in the host program calling a function from the Lua library (see -|lrv-lua_pcall|). Whenever an error occurs during Lua compilation or -execution, control returns to C, which can take appropriate measures (such as -print an error message). - -Lua code can explicitly generate an error by calling the$error$function (see -|lrv-error|). If you need to catch errors in Lua, you can use -the$pcall$function (see |lrv-pcall|). - - -============================================================================== -2.8 Metatables *lrv-metatable* *lrv-langMetatables* - - -Every value in Lua may have a@metatable@. This@metatable@is an ordinary Lua -table that defines the behavior of the original table and userdata under -certain special operations. You can change several aspects of the behavior of -an object by setting specific fields in its metatable. For instance, when a -non-numeric value is the operand of an addition, Lua checks for a function in -the field$"__add"$in its metatable. If it finds one, Lua calls that function -to perform the addition. - -We call the keys in a metatable@events@and the values@metamethods@. In the -previous example, the event is$"add"$and the metamethod is the function that -performs the addition. - -You can query the metatable of any value through the$getmetatable$function -(see |lrv-getmetatable|). - -You can replace the metatable of tables through the$setmetatable$function (see -|lrv-setmetatable|). You cannot change the metatable of other types from Lua -(except using the debug library); you must use the C API for that. - -Tables and userdata have individual metatables (although multiple tables and -userdata can share a same table as their metatable); values of all other types -share one single metatable per type. So, there is one single metatable for all -numbers, and for all strings, etc. - -A metatable may control how an object behaves in arithmetic operations, order -comparisons, concatenation, length operation, and indexing. A metatable can -also define a function to be called when a userdata is garbage collected. For -each of those operations Lua associates a specific key called an@event@. When -Lua performs one of those operations over a value, it checks whether this -value has a metatable with the corresponding event. If so, the value -associated with that key (the@metamethod@) controls how Lua will perform the -operation. - -Metatables control the operations listed next. Each operation is identified by -its corresponding name. The key for each operation is a string with its name -prefixed by two underscores,$'__'$; for instance, the key for operation "add" -is the string$"__add"$. The semantics of these operations is better explained -by a Lua function describing how the interpreter executes that operation. - -The code shown here in Lua is only illustrative; the real behavior is hard -coded in the interpreter and it is much more efficient than this simulation. -All functions used in these descriptions ($rawget$,$tonumber$, etc.) are -described in |lrv-libBasic|. In particular, to retrieve the metamethod of a -given object, we use the expression -> - metatable(obj)[event] -> -This should be read as -> - rawget(metatable(obj) or {}, event) -> -That is, the access to a metamethod does not invoke other metamethods, and the -access to objects with no metatables does not fail (it simply results -in#nil#). - -$"add":$ *lrv-__add* --------- -the$+$operation. - -The function$getbinhandler$below defines how Lua chooses a handler for a -binary operation. First, Lua tries the first operand. If its type does not -define a handler for the operation, then Lua tries the second operand. -> - function getbinhandler (op1, op2, event) - return metatable(op1)[event] or metatable(op2)[event] - end -> -By using this function, the behavior of the$op1 + op2$is -> - function add_event (op1, op2) - local o1, o2 = tonumber(op1), tonumber(op2) - if o1 and o2 then -- both operands are numeric? - return o1 + o2 -- `+' here is the primitive `add' - else -- at least one of the operands is not numeric - local h = getbinhandler(op1, op2, "__add") - if h then - -- call the handler with both operands - return h(op1, op2) - else -- no handler available: default behavior - error(...) - end - end - end -> -$"sub":$ *lrv-__sub* --------- -the$-$operation. Behavior similar to the "add" operation. - -$"mul":$ *lrv-__mul* --------- -the$*$operation. Behavior similar to the "add" operation. - -$"div":$ *lrv-__div* --------- -the$/$operation. Behavior similar to the "add" operation. - -$"mod":$ *lrv-__mod* --------- -the$%$operation. Behavior similar to the "add" operation, with the -operation$o1 - floor(o1/o2)*o2$as the primitive operation. - -$"pow":$ *lrv-__pow* --------- -the$^$(exponentiation) operation. Behavior similar to the "add" operation, -with the function$pow$(from the C math library) as the primitive operation. - -$"unm":$ *lrv-__unm* --------- -the unary$-$operation. -> - function unm_event (op) - local o = tonumber(op) - if o then -- operand is numeric? - return -o -- '-' here is the primitive 'unm' - else -- the operand is not numeric. - -- Try to get a handler from the operand - local h = metatable(op).__unm - if h then - -- call the handler with the operand - return h(op) - else -- no handler available: default behavior - error(...) - end - end - end -> -$"concat":$ *lrv-__concat* ------------ -the$..$(concatenation) operation. -> - function concat_event (op1, op2) - if (type(op1) == "string" or type(op1) == "number") and - (type(op2) == "string" or type(op2) == "number") then - return op1 .. op2 -- primitive string concatenation - else - local h = getbinhandler(op1, op2, "__concat") - if h then - return h(op1, op2) - else - error(...) - end - end - end -> -$"len":$ *lrv-__len* ------------ -the$#$operation. -> - function len_event (op) - if type(op) == "string" then - return strlen(op) -- primitive string length - elseif type(op) == "table" then - return #op -- primitive table length - else - local h = metatable(op).__len - if h then - -- call the handler with the operand - return h(op) - else -- no handler available: default behavior - error(...) - end - end - end -> -$"eq":$ *lrv-__eq* -------- -the$==$operation. - -The function$getcomphandler$defines how Lua chooses a metamethod for -comparison operators. A metamethod only is selected when both objects being -compared have the same type and the same metamethod for the selected -operation. -> - function getcomphandler (op1, op2, event) - if type(op1) ~= type(op2) then return nil end - local mm1 = metatable(op1)[event] - local mm2 = metatable(op2)[event] - if mm1 == mm2 then return mm1 else return nil end - end -> -The "eq" event is defined as follows: -> - function eq_event (op1, op2) - if type(op1) ~= type(op2) then -- different types? - return false -- different objects - end - if op1 == op2 then -- primitive equal? - return true -- objects are equal - end - -- try metamethod - local h = getcomphandler(op1, op2, "__eq") - if h then - return h(op1, op2) - else - return false - end - end -> -$a ~= b$is equivalent to$not (a == b)$. - -$"lt":$ *lrv-__lt* -------- -the$<$operation. -> - function lt_event (op1, op2) - if type(op1) == "number" and type(op2) == "number" then - return op1 < op2 -- numeric comparison - elseif type(op1) == "string" and type(op2) == "string" then - return op1 < op2 -- lexicographic comparison - else - local h = getcomphandler(op1, op2, "__lt") - if h then - return h(op1, op2) - else - error(...); - end - end - end -> -$a > b$is equivalent to$b < a$. - -$"le":$ *lrv-__le* -------- -the$<=$operation. -> - function le_event (op1, op2) - if type(op1) == "number" and type(op2) == "number" then - return op1 <= op2 -- numeric comparison - elseif type(op1) == "string" and type(op2) == "string" then - return op1 <= op2 -- lexicographic comparison - else - local h = getcomphandler(op1, op2, "__le") - if h then - return h(op1, op2) - else - h = getcomphandler(op1, op2, "__lt") - if h then - return not h(op2, op1) - else - error(...); - end - end - end - end -> -$a >= b$is equivalent to$b <= a$. Note that, in the absence of a "le" -metamethod, Lua tries the "lt", assuming that$a <= b$is equivalent -to$not (b < a)$. - -$"index":$ *lrv-__index* ----------- -The indexing access$table[key]$. -> - function gettable_event (table, key) - local h - if type(table) == "table" then - local v = rawget(table, key) - if v ~= nil then return v end - h = metatable(table).__index - if h == nil then return nil end - else - h = metatable(table).__index - if h == nil then - error(...); - end - end - if type(h) == "function" then - return h(table, key) -- call the handler - else return h[key] -- or repeat operation on it - end -> -$"newindex":$ *lrv-__newindex* -------------- -The indexing assignment$table[key] = value$. -> - function settable_event (table, key, value) - local h - if type(table) == "table" then - local v = rawget(table, key) - if v ~= nil then rawset(table, key, value); return end - h = metatable(table).__newindex - if h == nil then rawset(table, key, value); return end - else - h = metatable(table).__newindex - if h == nil then - error(...); - end - end - if type(h) == "function" then - return h(table, key,value) -- call the handler - else h[key] = value -- or repeat operation on it - end -> -$"call":$ *lrv-__call* ---------- -called when Lua calls a value. -> - function function_event (func, ...) - if type(func) == "function" then - return func(...) -- primitive call - else - local h = metatable(func).__call - if h then - return h(func, ...) - else - error(...) - end - end - end -> - -============================================================================== -2.9 Environments *lrv-environment* *lrv-langEnvironments* - - -Besides metatables, objects of types thread, function, and userdata have -another table associated with them, called their@environment@. Like -metatables, environments are regular tables and multiple objects can share the -same environment. - -Environments associated with userdata have no meaning for Lua. It is only a -convenience feature for programmers to associate a table to a userdata. - -Environments associated with threads are called@global environments@. They are -used as the default environment for their threads and non-nested functions -created by the thread (through$loadfile$|lrv-loadfile|, -$loadstring$|lrv-loadstring| or$load$|lrv-load|) and can be directly accessed -by C code (see |lrv-apiPseudoIndices|). - - -Environments associated with C functions can be directly accessed by C code -(see |lrv-apiPseudoIndices|). They are used as the default environment for -other C functions created by the function. - -Environments associated with Lua functions are used to resolve all accesses to -global variables within the function (see |lrv-langVariables|). They are used -as the default environment for other Lua functions created by the function. - -You can change the environment of a Lua function or the running thread by -calling$setfenv$(see |lrv-setenv|). You can get the environment of a Lua -function or the running thread by calling$getfenv$(see |lrv-getfenv|). To -manipulate the environment of other objects (userdata, C functions, other -threads) you must use the C API. - - -============================================================================== -2.10 Garbage Collection *lrv-langGC* - - -Lua performs automatic memory management. This means that you do not have to -worry neither about allocating memory for new objects nor about freeing it -when the objects are no longer needed. Lua manages memory automatically by -running a@garbage collector@from time to time to collect all@dead objects@ -(that is, these objects that are no longer accessible from Lua). All objects -in Lua are subject to automatic management: tables, userdata, functions, -threads, and strings. - -Lua implements an incremental mark-and-sweep collector. It uses two numbers to -control its garbage-collection cycles: the@garbage-collector pause@and the -@garbage-collector step multiplier@. - -The garbage-collector pause controls how long the collector waits before -starting a new cycle. Larger values make the collector less aggressive. Values -smaller than 1 mean the collector will not wait to start a new cycle. A value -of 2 means that the collector waits for the total memory in use to double -before starting a new cycle. - -The step multiplier controls the relative speed of the collector relative to -memory allocation. Larger values make the collector more aggressive but also -increase the size of each incremental step. Values smaller than 1 make the -collector too slow and may result in the collector never finishing a cycle. -The default, 2, means that the collector runs at "twice" the speed of memory -allocation. - -You can change these numbers by calling$lua_gc$(see |lrv-lua_gc|) in C or -$collectgarbage$(see |lrv-collectgarbage|) in Lua. Both get percentage points -as arguments (so an argument of 100 means a real value of 1). With these -functions you can also control the collector directly (e.g., stop and restart -it). - - ------------------------------------------------------------------------------- -2.10.1 Garbage-Collection Metamethods *lrv-langGCMeta* - - -Using the C API, you can set garbage-collector metamethods for userdata (see -|lrv-langMetatables|). These metamethods are also called@finalizers@. -Finalizers allow you to coordinate Lua's garbage collection with external -resource management (such as closing files, network or database connections, -or freeing your own memory). - - *lrv-__gc* -Garbage userdata with a field$__gc$in their metatables are not collected -immediately by the garbage collector. Instead, Lua puts them in a list. After -the collection, Lua does the equivalent of the following function for each -userdata in that list: -> - function gc_event (udata) - local h = metatable(udata).__gc - if h then - h(udata) - end - end -> -At the end of each garbage-collection cycle, the finalizers for userdata are -called in@reverse@order of their creation, among these collected in that -cycle. That is, the first finalizer to be called is the one associated with -the userdata created last in the program. - - ------------------------------------------------------------------------------- -2.10.2 - Weak Tables *lrv-weaktable* *lrv-langWeaktables* - - -A@weak table@is a table whose elements are@weak references@. A weak reference -is ignored by the garbage collector. In other words, if the only references to -an object are weak references, then the garbage collector will collect this -object. - - *lrv-__mode* -A weak table can have weak keys, weak values, or both. A table with weak keys -allows the collection of its keys, but prevents the collection of its values. -A table with both weak keys and weak values allows the collection of both keys -and values. In any case, if either the key or the value is collected, the -whole pair is removed from the table. The weakness of a table is controlled by -the value of the$__mode$field of its metatable. If the$__mode$field is a -string containing the character$'k'$, the keys in the table are weak. -If$__mode$contains$'v'$, the values in the table are weak. - -After you use a table as a metatable, you should not change the value of its -field$__mode$. Otherwise, the weak behavior of the tables controlled by this -metatable is undefined. - - -============================================================================== -2.11 Coroutines *lrv-coroutine* *lrv-langCoro* - - -Lua supports coroutines, also called@collaborative multithreading@. -A coroutine in Lua represents an independent thread of execution. Unlike -threads in multithread systems, however, a coroutine only suspends its -execution by explicitly calling a yield function. - -You create a coroutine with a call to$coroutine.create$(see -|lrv-coroutine.create|). Its sole argument is a function that is the main -function of the coroutine. The$create$function only creates a new coroutine -and returns a handle to it (an object of type@thread@); it does not start the -coroutine execution. - -When you first call$coroutine.resume$(see |lrv-coroutine.resume|), passing as -its first argument the thread returned by$coroutine.create$, the coroutine -starts its execution, at the first line of its main function. Extra arguments -passed to$coroutine.resume$are passed on to the coroutine main function. After -the coroutine starts running, it runs until it terminates or@yields@. - -A coroutine can terminate its execution in two ways: normally, when its main -function returns (explicitly or implicitly, after the last instruction); and -abnormally, if there is an unprotected error. In the first case, -$coroutine.resume$returns#true#, plus any values returned by the coroutine -main function. In case of errors,$coroutine.resume$returns#false#plus an error -message. - -A coroutine yields by calling$coroutine.yield$(see |lrv-coroutine.yield|). -When a coroutine yields, the corresponding$coroutine.resume$returns -immediately, even if the yield happens inside nested function calls (that is, -not in the main function, but in a function directly or indirectly called by -the main function). In the case of a yield,$coroutine.resume$also -returns#true#, plus any values passed to$coroutine.yield$. The next time you -resume the same coroutine, it continues its execution from the point where it -yielded, with the call to$coroutine.yield$returning any extra arguments passed -to$coroutine.resume$. - -Like$coroutine.create$, the$coroutine.wrap$function (see |lrv-coroutine.wrap|) -also creates a coroutine, but instead of returning the coroutine itself, it -returns a function that, when called, resumes the coroutine. Any arguments -passed to this function go as extra arguments to$coroutine.resume$. -$coroutine.wrap$returns all the values returned by$coroutine.resume$, except -the first one (the boolean error code). Unlike$coroutine.resume$, -$coroutine.wrap$does not catch errors; any error is propagated to the caller. - -As an example, consider the next code: -> - function foo1 (a) - print("foo", a) - return coroutine.yield(2*a) - end - - co = coroutine.create(function (a,b) - print("co-body", a, b) - local r = foo1(a+1) - print("co-body", r) - local r, s = coroutine.yield(a+b, a-b) - print("co-body", r, s) - return b, "end" - end) - - print("main", coroutine.resume(co, 1, 10)) - print("main", coroutine.resume(co, "r")) - print("main", coroutine.resume(co, "x", "y")) - print("main", coroutine.resume(co, "x", "y")) -> -When you run it, it produces the following output: -> - co-body 1 10 - foo 2 - main true 4 - co-body r - main true 11 -9 - co-body x y - main true 10 end - main false cannot resume dead coroutine -> - -============================================================================== -3 THE APPLICATION PROGRAM INTERFACE *lrv-API* -============================================================================== - - -This section describes the C API for Lua, that is, the set of C functions -available to the host program to communicate with Lua. All API functions and -related types and constants are declared in the header file$lua.h$. - -Even when we use the term "function", any facility in the API may be provided -as a@macro@instead. All such macros use each of its arguments exactly once -(except for the first argument, which is always a Lua state), and so do not -generate hidden side-effects. - -As in most C libraries, the Lua API functions do not check their arguments for -validity or consistency. However, you can change this behavior by compiling -Lua with a proper definition for the macro$luai_apicheck$,in file$luaconf.h$. - - -============================================================================== -3.1 The Stack *lrv-stack* *lrv-apiStack* - - -Lua uses a@virtual stack@to pass values to and from C. Each element in this -stack represents a Lua value (#nil#, number, string, etc.). - -Whenever Lua calls C, the called function gets a new stack, which is -independent of previous stacks and of stacks of C functions that are still -active. This stack initially contains any arguments to the C function and it -is where the C function pushes its results to be returned to the caller (see -|lrv-lua_CFunction|). - - *lrv-stackindex* -For convenience, most query operations in the API do not follow a strict stack -discipline. Instead, they can refer to any element in the stack by using an -@index@: a positive index represents an@absolute@stack position (starting -at 1); a negative index represents an@offset@from the top of the stack. -More specifically, if the stack has@n@elements, then index 1 represents the -first element (that is, the element that was pushed onto the stack first) and -index@n@represents the last element; index@-1@also represents the last element -(that is, the element at the top) and index@-n@represents the first element. -We say that an index is@valid@if it lies between 1 and the stack top (that is, -if$1 <= abs(index) <= top$). - - -============================================================================== -3.2 Stack Size *lrv-apiStackSize* - - -When you interact with Lua API, you are responsible for ensuring consistency. -In particular, @you are responsible for controlling stack overflow@. You can -use the function$lua_checkstack$to grow the stack size (see -|lrv-lua_checkstack|). - -Whenever Lua calls C, it ensures that at least$LUA_MINSTACK$stack positions -are available.$LUA_MINSTACK$is defined as 20, so that usually you do not have -to worry about stack space unless your code has loops pushing elements onto -the stack. - -Most query functions accept as indices any value inside the available stack -space, that is, indices up to the maximum stack size you have set -through$lua_checkstack$. Such indices are called@acceptable indices@. More -formally, we define an@acceptable index@as follows: -> - (index < 0 && abs(index) <= top) || (index > 0 && index <= stackspace) -> -Note that 0 is never an acceptable index. - - -============================================================================== -3.3 Pseudo-Indices *lrv-pseudoindex* *lrv-apiPseudoIndices* - - -Unless otherwise noted, any function that accepts valid indices can also be -called with@pseudo-indices@, which represent some Lua values that are -accessible to the C code but which are not in the stack. Pseudo-indices are -used to access the thread environment, the function environment, the registry, -and the upvalues of a C function (see |lrv-apiCClosures|). - -The thread environment (where global variables live) is always at pseudo-index -$LUA_GLOBALSINDEX$. The environment of the running C function is always at -pseudo-index$LUA_ENVIRONINDEX$. - -To access and change the value of global variables, you can use regular table -operations over an environment table. For instance, to access the value of a -global variable, do -> - lua_getfield(L, LUA_GLOBALSINDEX, varname); -> - -============================================================================== -3.4 C Closures *lrv-cclosure* *lrv-apiCClosures* - - -When a C function is created, it is possible to associate some values with it, -thus creating a@C closure@; these values are called@upvalues@and are -accessible to the function whenever it is called (see |lrv-lua_pushcclosure|). - - -Whenever a C function is called, its upvalues are located at specific -pseudo-indices. These pseudo-indices are produced by the macro -$lua_upvalueindex$(see |lrv-lua_upvalueindex|). The first value associated -with a function is at position$lua_upvalueindex(1)$, and so on. Any access to -$lua_upvalueindex($@n@$)$, where@n@is greater than the number of upvalues of -the current function, produces an acceptable (but invalid) index. - - -============================================================================== -3.5 Registry *lrv-registry* *lrv-apiRegistry* - - -Lua provides a@registry@, a pre-defined table that can be used by any -C code to store whatever Lua value it needs to store. This table is always -located at pseudo-index$LUA_REGISTRYINDEX$. Any C library can store data into -this table, but it should take care to choose keys different from those used -by other libraries, to avoid collisions. Typically, you should use as key a -string containing your library name or a light userdata with the address of a -C object in your code. - -The integer keys in the registry are used by the reference mechanism, -implemented by the auxiliary library, and therefore should not be used for -other purposes. - - -============================================================================== -3.6 Error Handling in C *lrv-apiError* - - -Internally, Lua uses the C$longjmp$facility to handle errors. (You can also -choose to use exceptions if you use C++; see file$luaconf.h$.) When Lua faces -any error (such as memory allocation errors, type errors, syntax errors, and -runtime errors) it@raises@an error; that is, it does a long jump. -A@protected environment@uses$setjmp$to set a recover point; any error jumps to -the most recent active recover point. - -Almost any function in the API may raise an error, for instance due to a -memory allocation error. The following functions run in protected mode (that -is, they create a protected environment to run), so they never raise an error: -$lua_newstate$,$lua_close$,$lua_load$,$lua_pcall$, and$lua_cpcall$(see -|lrv-lua_newstate|, |lrv-lua_close|, |lrv-lua_load|, |lrv-lua_pcall|, and -|lrv-lua_cpcall|). - -Inside a C function you can raise an error by calling$lua_error$ (see -|lrv-lua_error|). - - -============================================================================== -3.7 Functions and Types *lrv-apiFunctions* - - -Here we list all functions and types from the C API in alphabetical order. - - -$lua_Alloc$ *lrv-lua_Alloc* ------------ -> - typedef void * (*lua_Alloc) (void *ud, - void *ptr, - size_t osize, - size_t nsize); -> -The type of the memory-allocation function used by Lua states. The allocator -function must provide a functionality similar to$realloc$, but not exactly the -same. Its arguments are$ud$, an opaque pointer passed to$lua_newstate$ -(see |lrv-lua_newstate|);$ptr$, a pointer to the block being -allocated/reallocated/freed;$osize$, the original size of the block; -$nsize$, the new size of the block.$ptr$is$NULL$if and only if$osize$is zero. -When$nsize$is zero, the allocator must return$NULL$; if$osize$is not zero, -it should free the block pointed to by$ptr$. When$nsize$is not zero, the -allocator returns$NULL$if and only if it cannot fill the request. -When$nsize$is not zero and$osize$is zero, the allocator should behave -like$malloc$. When$nsize$and$osize$are not zero, the allocator behaves like -$realloc$. Lua assumes that the allocator never fails when$osize >= nsize$. - -Here is a simple implementation for the allocator function. It is used in the -auxiliary library by$luaL_newstate$(see |lrv-luaL_newstate|). -> - static void *l_alloc (void *ud, void *ptr, size_t osize, - size_t nsize) { - (void)ud; (void)osize; /* not used */ - if (nsize == 0) { - free(ptr); - return NULL; - } - else - return realloc(ptr, nsize); - } -> -This code assumes that$free(NULL)$has no effect and that -$realloc(NULL, size)$is equivalent to$malloc(size)$. ANSI C ensures both -behaviors. - - -$lua_atpanic$ *lrv-lua_atpanic* -------------- -> - lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf); -> -Sets a new panic function and returns the old one. - -If an error happens outside any protected environment, Lua calls a@panic@ -@function@and then calls$exit(EXIT_FAILURE)$, thus exiting the host -application. Your panic function may avoid this exit by never returning (e.g., -doing a long jump). - -The panic function can access the error message at the top of the stack. - - -$lua_call$ *lrv-lua_call* ----------- -> - void lua_call (lua_State *L, int nargs, int nresults); -> -Calls a function. - -To call a function you must use the following protocol: first, the function to -be called is pushed onto the stack; then, the arguments to the function are -pushed in direct order; that is, the first argument is pushed first. Finally -you call$lua_call$;$nargs$is the number of arguments that you pushed onto the -stack. All arguments and the function value are popped from the stack when the -function is called. The function results are pushed onto the stack when the -function returns. The number of results is adjusted to$nresults$, unless -$nresults$is$LUA_MULTRET$. In this case,@all@results from the function are -pushed. Lua takes care that the returned values fit into the stack space. The -function results are pushed onto the stack in direct order (the first result -is pushed first), so that after the call the last result is on the top of the -stack. - -Any error inside the called function is propagated upwards (with a$longjmp$). - -The following example shows how the host program may do the equivalent to this -Lua code: -> - a = f("how", t.x, 14) -> -Here it is in C: -> - lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */ - lua_pushstring(L, "how"); /* 1st argument */ - lua_getfield(L, LUA_GLOBALSINDEX, "t"); /* table to be indexed */ - lua_getfield(L, -1, "x"); /* push result of t.x (2nd arg) */ - lua_remove(L, -2); /* remove 't' from the stack */ - lua_pushinteger(L, 14); /* 3rd argument */ - lua_call(L, 3, 1); /* call 'f' with 3 arguments and 1 result */ - lua_setfield(L, LUA_GLOBALSINDEX, "a"); /* set global 'a' */ -> -Note that the code above is "balanced": at its end, the stack is back to its -original configuration. This is considered good programming practice. - - -$lua_CFunction$ *lrv-cfunction* *lrv-lua_CFunction* ---------------- -> - typedef int (*lua_CFunction) (lua_State *L); -> -Type for C functions. - -In order to communicate properly with Lua, a C function must use the following -protocol, which defines the way parameters and results are passed: a C -function receives its arguments from Lua in its stack in direct order (the -first argument is pushed first). So, when the function starts,$lua_gettop(L)$ -(see |lrv-lua_gettop|) returns the number of arguments received by the -function. The first argument (if any) is at index 1 and its last argument is -at index$lua_gettop(L)$. To return values to Lua, a C function just pushes -them onto the stack, in direct order (the first result is pushed first), and -returns the number of results. Any other value in the stack below the results -will be properly discarded by Lua. Like a Lua function, a C function called by -Lua can also return many results. - - *lrv-cfunctionexample* -As an example, the following function receives a variable number of numerical -arguments and returns their average and sum: -> - static int foo (lua_State *L) { - int n = lua_gettop(L); /* number of arguments */ - lua_Number sum = 0; - int i; - for (i = 1; i <= n; i++) { - if (!lua_isnumber(L, i)) { - lua_pushstring(L, "incorrect argument"); - lua_error(L); - } - sum += lua_tonumber(L, i); - } - lua_pushnumber(L, sum/n); /* first result */ - lua_pushnumber(L, sum); /* second result */ - return 2; /* number of results */ - } -> - -$lua_checkstack$ *lrv-lua_checkstack* ----------------- -> - int lua_checkstack (lua_State *L, int extra); -> -Ensures that there are at least$extra$free stack slots in the stack. It -returns false if it cannot grow the stack to that size. This function never -shrinks the stack; if the stack is already larger than the new size, it is -left unchanged. - - -$lua_close$ *lrv-lua_close* ------------ -> - void lua_close (lua_State *L); -> -Destroys all objects in the given Lua state (calling the corresponding -garbage-collection metamethods, if any) and frees all dynamic memory used by -this state. On several platforms, you may not need to call this function, -because all resources are naturally released when the host program ends. On -the other hand, long-running programs, such as a daemon or a web server, might -need to release states as soon as they are not needed, to avoid growing too -large. - - -$lua_concat$ *lrv-lua_concat* ------------- -> - void lua_concat (lua_State *L, int n); -> -Concatenates the$n$values at the top of the stack, pops them, and leaves the -result at the top. If$n$is 1, the result is the single string on the stack -(that is, the function does nothing); if$n$is 0, the result is the empty -string. Concatenation is done following the usual semantics of Lua (see -|lrv-langConcat|). - - -$lua_cpcall$ *lrv-lua_cpcall* ------------- -> - int lua_cpcall (lua_State *L, lua_CFunction func, void *ud); -> -Calls the C function$func$in protected mode.$func$starts with only one element -in its stack, a light userdata containing$ud$. In case of errors, -$lua_cpcall$returns the same error codes as$lua_pcall$(see |lrv-lua_pcall|), -plus the error object on the top of the stack; otherwise, it returns zero, and -does not change the stack. All values returned by$func$are discarded. - - -$lua_createtable$ *lrv-lua_createtable* ------------------ -> - void lua_createtable (lua_State *L, int narr, int nrec); -> -Creates a new empty table and pushes it onto the stack. The new table has -space pre-allocated for$narr$array elements and$nrec$non-array elements. This -pre-allocation is useful when you know exactly how many elements the table -will have. Otherwise you can use the function$lua_newtable$ (see -|lrv-lua_newtable|). - - -$lua_dump$ *lrv-lua_dump* ----------- -> - int lua_dump (lua_State *L, lua_Writer writer, void *data); -> -Dumps a function as a binary chunk. Receives a Lua function on the top of the -stack and produces a binary chunk that, if loaded again, results in a function -equivalent to the one dumped. As it produces parts of the chunk,$lua_dump$ -calls function$writer$(see |lrv-lua_Writer|) with the given$data$to write -them. - -The value returned is the error code returned by the last call to the writer; -0 means no errors. - -This function does not pop the Lua function from the stack. - - -$lua_equal$ *lrv-lua_equal* ------------ -> - int lua_equal (lua_State *L, int index1, int index2); -> -Returns 1 if the two values in acceptable indices$index1$and$index2$are equal, -following the semantics of the Lua$==$operator (that is, may call -metamethods). Otherwise returns 0. Also returns 0 if any of the indices is non -valid. - - -$lua_error$ *lrv-lua_error* ------------ -> - int lua_error (lua_State *L); -> -Generates a Lua error. The error message (which can actually be a Lua value of -any type) must be on the stack top. This function does a long jump, and -therefore never returns (see |lrv-luaL_error|). - - -$lua_gc$ *lrv-lua_gc* --------- -> - int lua_gc (lua_State *L, int what, int data); -> -Controls the garbage collector. - -This function performs several tasks, according to the value of the parameter -$what$: - - #o#$LUA_GCSTOP$: stops the garbage collector. - #o#$LUA_GCRESTART$: restarts the garbage collector. - #o#$LUA_GCCOLLECT$: performs a full garbage-collection cycle. - #o#$LUA_GCCOUNT$: returns the current amount of memory (in Kbytes) in use by - Lua. - #o#$LUA_GCCOUNTB$: returns the remainder of dividing the current amount of - bytes of memory in use by Lua by 1024. - #o#$LUA_GCSTEP$: performs an incremental step of garbage collection. The - step "size" is controlled by$data$(larger values mean more steps) in a - non-specified way. If you want to control the step size you must - experimentally tune the value of$data$. The function returns 1 if the - step finished a garbage-collection cycle. - #o#$LUA_GCSETPAUSE$: sets$data$/100 as the new value for the@pause@of the - collector (see |lrv-langGC|). The function returns the previous value of - the pause. - #o#$LUA_GCSETSTEPMUL$: sets$data$/100 as the new value for the@step@ - @multiplier@ of the collector (see |lrv-langGC|). The function returns - the previous value of the step multiplier. - - -$lua_getallocf$ *lrv-lua_getallocf* ---------------- -> - lua_Alloc lua_getallocf (lua_State *L, void **ud); -> -Returns the memory-allocation function of a given state. If$ud$is not$NULL$, -Lua stores in$*ud$the opaque pointer passed to$lua_newstate$(see -|lrv-lua_newstate|). - - -$lua_getfenv$ *lrv-lua_getfenv* -------------- -> - void lua_getfenv (lua_State *L, int index); -> -Pushes onto the stack the environment table of the value at the given index. - - -$lua_getfield$ *lrv-lua_getfield* --------------- -> - void lua_getfield (lua_State *L, int index, const char *k); -> -Pushes onto the stack the value$t[k]$, where$t$is the value at the given valid -index$index$. As in Lua, this function may trigger a metamethod for the -"index" event (see |lrv-langMetatables|). - - -$lua_getglobal$ *lrv-lua_getglobal* ---------------- -> - void lua_getglobal (lua_State *L, const char *name); -> -Pushes onto the stack the value of the global$name$. It is defined as a macro: -> - #define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, s) -> - -$lua_getmetatable$ *lrv-lua_getmetatable* ------------------- -> - int lua_getmetatable (lua_State *L, int index); -> -Pushes onto the stack the metatable of the value at the given acceptable -index. If the index is not valid, or if the value does not have a metatable, -the function returns 0 and pushes nothing on the stack. - - -$lua_gettable$ *lrv-lua_gettable* --------------- -> - void lua_gettable (lua_State *L, int index); -> -Pushes onto the stack the value$t[k]$, where$t$is the value at the given valid -index$index$and$k$is the value at the top of the stack. - -This function pops the key from the stack (putting the resulting value in its -place). As in Lua, this function may trigger a metamethod for the "index" -event (see |lrv-langMetatables|). - - -$lua_gettop$ *lrv-lua_gettop* ------------- -> - int lua_gettop (lua_State *L); -> -Returns the index of the top element in the stack. Because indices start -at 1, this result is equal to the number of elements in the stack (and so -0 means an empty stack). - - -$lua_insert$ *lrv-lua_insert* ------------- -> - void lua_insert (lua_State *L, int index); -> -Moves the top element into the given valid index, shifting up the elements -above this index to open space. Cannot be called with a pseudo-index, because -a pseudo-index is not an actual stack position. - - -$lua_Integer$ *lrv-lua_Integer* -------------- -> - typedef ptrdiff_t lua_Integer; -> -The type used by the Lua API to represent integral values. - -By default it is a$ptrdiff_t$, which is usually the largest integral type the -machine handles "comfortably". - - -$lua_isboolean$ *lrv-lua_isboolean* ---------------- -> - int lua_isboolean (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index has type boolean, and -0 otherwise. - - -$lua_iscfunction$ *lrv-lua_iscfunction* ------------------ -> - int lua_iscfunction (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a C function, and -0 otherwise. - - -$lua_isfunction$ *lrv-lua_isfunction* ----------------- -> - int lua_isfunction (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a function (either -C or Lua), and 0 otherwise. - - -$lua_islightuserdata$ *lrv-lua_islightuserdata* ---------------------- -> - int lua_islightuserdata (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a light userdata, and -0 otherwise. - - -$lua_isnil$ *lrv-lua_isnil* ------------ -> - int lua_isnil (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is#nil#, and 0 otherwise. - - -$lua_isnumber$ *lrv-lua_isnumber* --------------- -> - int lua_isnumber (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a number or a string -convertible to a number, and 0 otherwise. - - -$lua_isstring$ *lrv-lua_isstring* --------------- -> - int lua_isstring (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a string or a number -(which is always convertible to a string), and 0 otherwise. - - -$lua_istable$ *lrv-lua_istable* -------------- -> - int lua_istable (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a table, and -0 otherwise. - - -$lua_isthread$ *lrv-lua_isthread* --------------- -> - int lua_isthread (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a thread, and -0 otherwise. - - -$lua_isuserdata$ *lrv-lua_isuserdata* ----------------- -> - int lua_isuserdata (lua_State *L, int index); -> -Returns 1 if the value at the given acceptable index is a userdata (either -full or light), and 0 otherwise. - - -$lua_lessthan$ *lrv-lua_lessthan* --------------- -> - int lua_lessthan (lua_State *L, int index1, int index2); -> -Returns 1 if the value at acceptable index$index1$is smaller than the value at -acceptable index$index2$, following the semantics of the Lua$<$operator (that -is, may call metamethods). Otherwise returns 0. Also returns 0 if any of the -indices is non valid. - - -$lua_load$ *lrv-lua_load* ----------- -> - int lua_load (lua_State *L, - lua_Reader reader, - void *data, - const char *chunkname); -> -Loads a Lua chunk. If there are no errors,$lua_load$pushes the compiled chunk -as a Lua function on top of the stack. Otherwise, it pushes an error message. -The return values of$lua_load$are: - - #o##0#: no errors; - #o#$LUA_ERRSYNTAX$: syntax error during pre-compilation; - #o#$LUA_ERRMEM$: memory allocation error. - -This function only loads a chunk; it does not run it. - -$lua_load$automatically detects whether the chunk is text or binary, and loads -it accordingly (see program$luac$, |lrv-luac|). - -The$lua_load$function uses a user-supplied$reader$function to read the chunk -(see |lrv-lua_Reader|). The$data$argument is an opaque value passed to the -reader function. - -The$chunkname$argument gives a name to the chunk, which is used for error -messages and in debug information (see |lrv-apiDebug|). - - -$lua_newstate$ *lrv-lua_newstate* --------------- -> - lua_State *lua_newstate (lua_Alloc f, void *ud); -> -Creates a new, independent state. Returns$NULL$if cannot create the state (due -to lack of memory). The argument$f$is the allocator function; Lua does all -memory allocation for this state through this function. The second argument, -$ud$, is an opaque pointer that Lua simply passes to the allocator in every -call. - - -$lua_newtable$ *lrv-lua_newtable* --------------- -> - void lua_newtable (lua_State *L); -> -Creates a new empty table and pushes it onto the stack. It is equivalent to -$lua_createtable(L, 0, 0)$(see |lrv-lua_createtable|). - - -$lua_newthread$ *lrv-lua_newthread* ---------------- -> - lua_State *lua_newthread (lua_State *L); -> -Creates a new thread, pushes it on the stack, and returns a pointer to a -$lua_State$ (see |lrv-lua_State|) that represents this new thread. The new -state returned by this function shares with the original state all global -objects (such as tables), but has an independent execution stack. - -There is no explicit function to close or to destroy a thread. Threads are -subject to garbage collection, like any Lua object. - - -$lua_newuserdata$ *lrv-lua_newuserdata* ------------------ -> - void *lua_newuserdata (lua_State *L, size_t size); -> -This function allocates a new block of memory with the given size, pushes onto -the stack a new full userdata with the block address, and returns this -address. - - *lrv-userdata* -Userdata represents C values in Lua. A@full userdata@represents a block of -memory. It is an object (like a table): you must create it, it can have its -own metatable, and you can detect when it is being collected. A full userdata -is only equal to itself (under raw equality). - -When Lua collects a full userdata with a$gc$metamethod, Lua calls the -metamethod and marks the userdata as finalized. When this userdata is -collected again then Lua frees its corresponding memory. - - -$lua_next$ *lrv-lua_next* ----------- -> - int lua_next (lua_State *L, int index); -> -Pops a key from the stack, and pushes a key-value pair from the table at the -given index (the "next" pair after the given key). If there are no more -elements in the table, then$lua_next$returns 0 (and pushes nothing). - - *lrv-tabletraversal* -A typical traversal looks like this: -> - /* table is in the stack at index 't' */ - lua_pushnil(L); /* first key */ - while (lua_next(L, t) != 0) { - /* uses 'key' (at index -2) and 'value' (at index -1) */ - printf("%s - %s\n", - lua_typename(L, lua_type(L, -2)), - lua_typename(L, lua_type(L, -1))); - /* removes 'value'; keeps 'key' for next iteration */ - lua_pop(L, 1); - } -> -While traversing a table, do not call$lua_tolstring$(see |lrv-lua_tolstring|) -directly on a key, unless you know that the key is actually a string. Recall -that$lua_tolstring$@changes@the value at the given index; this confuses the -next call to$lua_next$. - - -$lua_Number$ *lrv-lua_Number* ------------- -> - typedef double lua_Number; -> -The type of numbers in Lua. By default, it is double, but that can be changed -in$luaconf.h$. - -Through the configuration file you can change Lua to operate with another type -for numbers (e.g., float or long). - - -$lua_objlen$ *lrv-lua_objlen* ------------- -> - size_t lua_objlen (lua_State *L, int index); -> -Returns the "length" of the value at the given acceptable index: for strings, -this is the string length; for tables, this is the result of the length -operator ($'#'$); for userdata, this is the size of the block of memory -allocated for the userdata; for other values, it is 0. - - -$lua_pcall$ *lrv-lua_pcall* ------------ -> - lua_pcall (lua_State *L, int nargs, int nresults, int errfunc); -> -Calls a function in protected mode. - -Both$nargs$and$nresults$have the same meaning as in$lua_call$(see -|lrv-lua_call|). If there are no errors during the call,$lua_pcall$behaves -exactly like $lua_call$. However, if there is any error,$lua_pcall$catches it, -pushes a single value on the stack (the error message), and returns an error -code. Like $lua_call$,$lua_pcall$always removes the function and its arguments -from the stack. - -If$errfunc$is 0, then the error message returned on the stack is exactly the -original error message. Otherwise,$errfunc$is the stack index of an@error@ -@handler function@. (In the current implementation, this index cannot be a -pseudo-index.) In case of runtime errors, this function will be called with -the error message and its return value will be the message returned on the -stack by$lua_pcall$. - -Typically, the error handler function is used to add more debug information to -the error message, such as a stack traceback. Such information cannot be -gathered after the return of$lua_pcall$, since by then the stack has unwound. - -The$lua_pcall$function returns 0 in case of success or one of the following -error codes (defined in$lua.h$): - - #o#$LUA_ERRRUN$: a runtime error. - #o#$LUA_ERRMEM$: memory allocation error. For such errors, Lua does not call - the error handler function. - #o#$LUA_ERRERR$: error while running the error handler function. - - -$lua_pop$ *lrv-lua_pop* ---------- -> - void lua_pop (lua_State *L, int n); -> -Pops$n$elements from the stack. - - -$lua_pushboolean$ *lrv-lua_pushboolean* ------------------ -> - void lua_pushboolean (lua_State *L, int b); -> -Pushes a boolean value with value$b$onto the stack. - - -$lua_pushcclosure$ *lrv-lua_pushcclosure* ------------------- -> - void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); -> -Pushes a new C closure onto the stack. - -When a C function is created, it is possible to associate some values with it, -thus creating a C closure (see |lrv-apiCClosures|); these values are then -accessible to the function whenever it is called. To associate values with a -C function, first these values should be pushed onto the stack (when there are -multiple values, the first value is pushed first). Then$lua_pushcclosure$is -called to create and push the C function onto the stack, with the argument -$n$telling how many values should be associated with the function. -$lua_pushcclosure$also pops these values from the stack. - - -$lua_pushcfunction$ *lrv-lua_pushcfunction* -------------------- -> - void lua_pushcfunction (lua_State *L, lua_CFunction f); -> -Pushes a C function onto the stack. This function receives a pointer to a C -function and pushes onto the stack a Lua value of type$function$that, when -called, invokes the corresponding C function. - -Any function to be registered in Lua must follow the correct protocol to -receive its parameters and return its results (see |lrv-lua_CFunction|). - -$lua_pushcfunction$is defined as a macro: -> - #define lua_pushcfunction(L,f) lua_pushcclosure(L,f,0) -> - -$lua_pushfstring$ *lrv-lua_pushfstring* ------------------ -> - const char *lua_pushfstring (lua_State *L, const char *fmt, ...); -> -Pushes onto the stack a formatted string and returns a pointer to this string. -It is similar to the C function$sprintf$, but has some important differences: - - #o# You do not have to allocate space for the result: the result is a Lua - string and Lua takes care of memory allocation (and deallocation, - through garbage collection). - #o# The conversion specifiers are quite restricted. There are no flags, - widths, or precisions. The conversion specifiers can only be$'%%'$ - (inserts a$'%'$in the string),$'%s'$(inserts a zero-terminated string, - with no size restrictions),$'%f'$(inserts a$lua_Number$),$'%p'$(inserts - a pointer as a hexadecimal numeral),$'%d'$(inserts an$int$), and$'%c'$ - (inserts an$int$as a character). - - -$lua_pushinteger$ *lrv-lua_pushinteger* ------------------ -> - void lua_pushinteger (lua_State *L, lua_Integer n); -> -Pushes a number with value$n$onto the stack. - - -$lua_pushlightuserdata$ *lrv-lua_pushlightuserdata* ------------------------ -> - void lua_pushlightuserdata (lua_State *L, void *p); -> -Pushes a light userdata onto the stack. - - *lrv-lightuserdata* -Userdata represents C values in Lua. A@light userdata@represents a pointer. It -is a value (like a number): you do not create it, it has no individual -metatable, and it is not collected (as it was never created). A light userdata -is equal to "any" light userdata with the same C address. - - -$lua_pushlstring$ *lrv-lua_pushlstring* ------------------ -> - void lua_pushlstring (lua_State *L, const char *s, size_t len); -> -Pushes the string pointed to by$s$with size$len$onto the stack. Lua makes (or -reuses) an internal copy of the given string, so the memory at$s$can be freed -or reused immediately after the function returns. The string can contain -embedded zeros. - - -$lua_pushnil$ *lrv-lua_pushnil* -------------- -> - void lua_pushnil (lua_State *L); -> -Pushes a nil value onto the stack. - - -$lua_pushnumber$ *lrv-lua_pushnumber* ----------------- -> - void lua_pushnumber (lua_State *L, lua_Number n); -> -Pushes a number with value$n$onto the stack. - - -$lua_pushstring$ *lrv-lua_pushstring* ----------------- -> - void lua_pushstring (lua_State *L, const char *s); -> -Pushes the zero-terminated string pointed to by$s$onto the stack. Lua makes -(or reuses) an internal copy of the given string, so the memory at$s$can be -freed or reused immediately after the function returns. The string cannot -contain embedded zeros; it is assumed to end at the first zero. - - -$lua_pushthread$ *lrv-lua_pushthread* ----------------- -> - int lua_pushthread (lua_State *L); -> -Pushes the thread represented by$L$onto the stack. Returns 1 if this thread is -the main thread of its state. - - -$lua_pushvalue$ *lrv-lua_pushvalue* ---------------- -> - void lua_pushvalue (lua_State *L, int index); -> -Pushes a copy of the element at the given valid index onto the stack. - - -$lua_pushvfstring$ *lrv-lua_pushvfstring* ------------------- -> - const char *lua_pushvfstring (lua_State *L, - const char *fmt, - va_list argp); -> -Equivalent to$lua_pushfstring$(see |lrv-pushfstring|), except that it -receives a$va_list$instead of a variable number of arguments. - - -$lua_rawequal$ *lrv-lua_rawequal* --------------- -> - int lua_rawequal (lua_State *L, int index1, int index2); -> -Returns 1 if the two values in acceptable indices$index1$and$index2$are -primitively equal (that is, without calling metamethods). Otherwise -returns 0. Also returns 0 if any of the indices are non valid. - - -$lua_rawget$ *lrv-lua_rawget* ------------- -> - void lua_rawget (lua_State *L, int index); -> -Similar to$lua_gettable$(see |lrv-lua_gettable|), but does a raw access -(i.e., without metamethods). - - -$lua_rawgeti$ *lrv-lua_rawgeti* -------------- -> - void lua_rawgeti (lua_State *L, int index, int n); -> -Pushes onto the stack the value$t[n]$, where$t$is the value at the given valid -index$index$. The access is raw; that is, it does not invoke metamethods. - - -$lua_rawset$ *lrv-lua_rawset* ------------- -> - void lua_rawset (lua_State *L, int index); -> -Similar to$lua_settable$(see |lrv-lua_settable|), but does a raw assignment -(i.e., without metamethods). - - -$lua_rawseti$ *lrv-lua_rawseti* -------------- -> - void lua_rawseti (lua_State *L, int index, int n); -> -Does the equivalent of$t[n] = v$, where$t$is the value at the given valid -index$index$and$v$is the value at the top of the stack. - -This function pops the value from the stack. The assignment is raw; that is, -it does not invoke metamethods. - - -$lua_Reader$ *lrv-lua_Reader* ------------- -> - typedef const char * (*lua_Reader) (lua_State *L, - void *data, - size_t *size); -> -The reader function used by$lua_load$(see |lrv-lua_load|). Every time it needs -another piece of the chunk,$lua_load$calls the reader, passing along its$data$ -parameter. The reader must return a pointer to a block of memory with a new -piece of the chunk and set$size$to the block size. The block must exist until -the reader function is called again. To signal the end of the chunk, the -reader must return$NULL$. The reader function may return pieces of any size -greater than zero. - - -$lua_register$ *lrv-lua_register* --------------- -> - void lua_register (lua_State *L, - const char *name, - lua_CFunction f); -> -Sets the C function$f$as the new value of global$name$. It is defined as a -macro: -> - #define lua_register(L,n,f) \ - (lua_pushcfunction(L, f), lua_setglobal(L, n)) -> - -$lua_remove$ *lrv-lua_remove* ------------- -> - void lua_remove (lua_State *L, int index); -> -Removes the element at the given valid index, shifting down the elements above -this index to fill the gap. Cannot be called with a pseudo-index, because a -pseudo-index is not an actual stack position. - - -$lua_replace$ *lrv-lua_replace* -------------- -> - void lua_replace (lua_State *L, int index); -> -Moves the top element into the given position (and pops it), without shifting -any element (therefore replacing the value at the given position). - - -$lua_resume$ *lrv-lua_resume* ------------- -> - int lua_resume (lua_State *L, int narg); -> -Starts and resumes a coroutine in a given thread. - -To start a coroutine, you first create a new thread (see |lrv-lua_newthread|); -then you push onto its stack the main function plus any arguments; then you -call$lua_resume$(see |lrv-lua_resume|) with$narg$being the number of -arguments. This call returns when the coroutine suspends or finishes its -execution. When it returns, the stack contains all values passed to$lua_yield$ -(see |lrv-lua_yield|), or all values returned by the body function. -$lua_resume$returns$LUA_YIELD$if the coroutine yields, 0 if the coroutine -finishes its execution without errors, or an error code in case of errors (see -|lrv-lua_pcall|). In case of errors, the stack is not unwound, so you can use -the debug API over it. The error message is on the top of the stack. To -restart a coroutine, you put on its stack only the values to be passed as -results from$lua_yield$, and then call$lua_resume$. - - -$lua_setallocf$ *lrv-lua_setallocf* ---------------- -> - void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); -> -Changes the allocator function of a given state to$f$with user data$ud$. - - -$lua_setfenv$ *lrv-lua_setfenv* -------------- -> - int lua_setfenv (lua_State *L, int index); -> -Pops a table from the stack and sets it as the new environment for the value -at the given index. If the value at the given index is neither a function nor -a thread nor a userdata,$lua_setfenv$returns 0. Otherwise it returns 1. - - -$lua_setfield$ *lrv-lua_setfield* --------------- -> - void lua_setfield (lua_State *L, int index, const char *k); -> -Does the equivalent to$t[k] = v$, where$t$is the value at the given valid -index$index$and$v$is the value at the top of the stack. - -This function pops the value from the stack. As in Lua, this function may -trigger a metamethod for the "newindex" event (see |lrv-langMetatables|). - - -$lua_setglobal$ *lrv-lua_setglobal* ---------------- -> - void lua_setglobal (lua_State *L, const char *name); -> -Pops a value from the stack and sets it as the new value of global$name$. -It is defined as a macro: -> - #define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, s) -> - -$lua_setmetatable$ *lrv-lua_setmetatable* ------------------- -> - int lua_setmetatable (lua_State *L, int index); -> -Pops a table from the stack and sets it as the new metatable for the value at -the given acceptable index. - - -$lua_settable$ *lrv-lua_settable* --------------- -> - void lua_settable (lua_State *L, int index); -> -Does the equivalent to$t[k] = v$, where$t$is the value at the given valid -index$index$,$v$is the value at the top of the stack, and$k$is the value just -below the top. - -This function pops both the key and the value from the stack. As in Lua, this -function may trigger a metamethod for the "newindex" event (see -|lrv-langMetatables|). - - -$lua_settop$ *lrv-lua_settop* ------------- -> - void lua_settop (lua_State *L, int index); -> -Accepts any acceptable index, or 0, and sets the stack top to this index. If -the new top is larger than the old one, then the new elements are filled with -#nil#. If$index$is 0, then all stack elements are removed. - - -$lua_State$ *lrv-lua_State* ------------ -> - typedef struct lua_State lua_State; -> -Opaque structure that keeps the whole state of a Lua interpreter. The Lua -library is fully reentrant: it has no global variables. All information about -a state is kept in this structure. - -A pointer to this state must be passed as the first argument to every function -in the library, except to$lua_newstate$(see |lrv-lua_newstate|), which -creates a Lua state from scratch. - - -$lua_status$ *lrv-lua_status* ------------- -> - int lua_status (lua_State *L); -> -Returns the status of the thread$L$. - -The status can be 0 for a normal thread, an error code if the thread finished -its execution with an error, or$LUA_YIELD$if the thread is suspended. - - -$lua_toboolean$ *lrv-lua_toboolean* ---------------- -> - int lua_toboolean (lua_State *L, int index); -> -Converts the Lua value at the given acceptable index to a C boolean value -(0 or 1). Like all tests in Lua,$lua_toboolean$returns 1 for any Lua value -different from#false#and#nil#; otherwise it returns 0. It also returns 0 when -called with a non-valid index. (If you want to accept only actual boolean -values, use$lua_isboolean$|lrv-lua_isboolean| to test the value's type.) - - -$lua_tocfunction$ *lrv-lua_tocfunction* ------------------ -> - lua_CFunction lua_tocfunction (lua_State *L, int index); -> -Converts a value at the given acceptable index to a C function. That value -must be a C function; otherwise it returns$NULL$. - - -$lua_tointeger$ *lrv-lua_tointeger* ---------------- -> - lua_Integer lua_tointeger (lua_State *L, int idx); -> -Converts the Lua value at the given acceptable index to the signed integral -type$lua_Integer$(see |lrv-lua_Integer|). The Lua value must be a number or a -string convertible to a number (see |lrv-langCoercion|); otherwise, -$lua_tointeger$returns 0. - -If the number is not an integer, it is truncated in some non-specified way. - - -$lua_tolstring$ *lrv-lua_tolstring* ---------------- -> - const char *lua_tolstring (lua_State *L, int index, size_t *len); -> -Converts the Lua value at the given acceptable index to a C string. If$len$is -not$NULL$, it also sets$*len$with the string length. The Lua value must be a -string or a number; otherwise, the function returns$NULL$. If the value is a -number, then$lua_tolstring$ also@changes the actual value in the stack to a@ -@string@. (This change confuses$lua_next$|lrv-lua_next| when$lua_tolstring$is -applied to keys during a table traversal.) - -$lua_tolstring$returns a fully aligned pointer to a string inside the Lua -state. This string always has a zero ($'\0'$) after its last character (as -in C), but may contain other zeros in its body. Because Lua has garbage -collection, there is no guarantee that the pointer returned by$lua_tolstring$ -will be valid after the corresponding value is removed from the stack. - - -$lua_tonumber$ *lrv-lua_tonumber* --------------- -> - lua_Number lua_tonumber (lua_State *L, int index); -> -Converts the Lua value at the given acceptable index to the C type$lua_Number$ -(see |lrv-lua_Number|). The Lua value must be a number or a string convertible -to a number (see |lrv-langCoercion|); otherwise,$lua_tonumber$returns 0. - - -$lua_topointer$ *lrv-lua_topointer* ---------------- -> - const void *lua_topointer (lua_State *L, int index); -> -Converts the value at the given acceptable index to a generic C pointer -($void*$). The value may be a userdata, a table, a thread, or a function; -otherwise,$lua_topointer$returns$NULL$. Different objects will give different -pointers. There is no way to convert the pointer back to its original value. - -Typically this function is used only for debug information. - - -$lua_tostring$ *lrv-lua_tostring* --------------- -> - const char *lua_tostring (lua_State *L, int index); -> -Equivalent to$lua_tolstring$(see |lrv-lua_tolstring|) with$len$equal to$NULL$. - - -$lua_tothread$ *lrv-lua_tothread* --------------- -> - lua_State *lua_tothread (lua_State *L, int index); -> -Converts the value at the given acceptable index to a Lua thread (represented -as$lua_State*$|lrv-lua_State|). This value must be a thread; otherwise, the -function returns$NULL$. - - -$lua_touserdata$ *lrv-lua_touserdata* ----------------- -> - void *lua_touserdata (lua_State *L, int index); -> -If the value at the given acceptable index is a full userdata, returns its -block address. If the value is a light userdata, returns its pointer. -Otherwise, it returns$NULL$. - - -$lua_type$ *lrv-lua_type* ----------- -> - int lua_type (lua_State *L, int index); -> -Returns the type of the value in the given acceptable index, or$LUA_TNONE$for -a non-valid index (that is, an index to an "empty" stack position). The types -returned by$lua_type$are coded by the following constants defined in$lua.h$: -$LUA_TNIL$,$LUA_TNUMBER$,$LUA_TBOOLEAN$,$LUA_TSTRING$,$LUA_TTABLE$, -$LUA_TFUNCTION$,$LUA_TUSERDATA$,$LUA_TTHREAD$, and$LUA_TLIGHTUSERDATA$. - - -$lua_typename$ *lrv-lua_typename* --------------- -> - const char *lua_typename (lua_State *L, int tp); -> -Returns the name of the type encoded by the value$tp$, which must be one the -values returned by$lua_type$. - - -$lua_Writer$ *lrv-lua_Writer* ------------- -> - typedef int (*lua_Writer) (lua_State *L, - const void* p, - size_t sz, - void* ud); -> -The writer function used by$lua_dump$(see |lrv-lua_dump|). Every time it -produces another piece of chunk,$lua_dump$calls the writer, passing along the -buffer to be written ($p$), its size ($sz$), and the$data$parameter supplied -to$lua_dump$. - -The writer returns an error code: 0 means no errors; any other value means an -error and stops$lua_dump$from calling the writer again. - - -$lua_xmove$ *lrv-lua_xmove* ------------ -> - void lua_xmove (lua_State *from, lua_State *to, int n); -> -Exchange values between different threads of the@same@global state. - -This function pops$n$values from the stack$from$, and pushes them onto the -stack$to$. - - -$lua_yield$ *lrv-lua_yield* ------------ -> - int lua_yield (lua_State *L, int nresults); -> -Yields a coroutine. - -This function should only be called as the return expression of a C function, -as follows: -> - return lua_yield (L, nresults); -> -When a C function calls$lua_yield$in that way, the running coroutine suspends -its execution, and the call to$lua_resume$(see |lrv-lua_resume|) that started -this coroutine returns. The parameter$nresults$is the number of values from -the stack that are passed as results to$lua_resume$. - - - *lrv-stackexample* -As an example of stack manipulation, if the stack starts as -$10 20 30 40 50*$(from bottom to top; the $'*'$marks the top), then -> - lua_pushvalue(L, 3) --> 10 20 30 40 50 30* - lua_pushvalue(L, -1) --> 10 20 30 40 50 30 30* - lua_remove(L, -3) --> 10 20 30 40 30 30* - lua_remove(L, 6) --> 10 20 30 40 30* - lua_insert(L, 1) --> 30 10 20 30 40* - lua_insert(L, -1) --> 30 10 20 30 40* (no effect) - lua_replace(L, 2) --> 30 40 20 30* - lua_settop(L, -3) --> 30 40* - lua_settop(L, 6) --> 30 40 nil nil nil nil* -> - -============================================================================== -3.8 The Debug Interface *lrv-apiDebug* - - -Lua has no built-in debugging facilities. Instead, it offers a special -interface by means of functions and@hooks@. This interface allows the -construction of different kinds of debuggers, profilers, and other tools that -need "inside information" from the interpreter. - - -$lua_Debug$ *lrv-lua_Debug* ------------ - - $typedef struct lua_Debug {$ - $int event;$ - $const char *name; /* (n) */$ - $const char *namewhat; /* (n) */$ - $const char *what; /* (S) */$ - $const char *source; /* (S) */$ - $int currentline; /* (l) */$ - $int nups; /* (u) number of upvalues */$ - $int linedefined; /* (S) */$ - $int lastlinedefined; /* (S) */$ - $char short_src[LUA_IDSIZE]; /* (S) */$ - $/* private part */$ - @other fields@ - $} lua_Debug;$ - - -A structure used to carry different pieces of information about an active -function.$lua_getstack$(see |lrv-lua_getstack|) fills only the private part -of this structure, for later use. To fill the other fields of$lua_Debug$with -useful information, call$lua_getinfo$(see |lrv-lua_getinfo|). - -The fields of$lua_Debug$ have the following meaning: - - #o#$source$: If the function was defined in a string, then$source$is that - string. If the function was defined in a file, then$source$starts with a - $'@'$followed by the file name. - #o#$short_src$: a "printable" version of$source$, to be used in error - messages. - #o#$linedefined$: the line number where the definition of the function - starts. - #o#$lastlinedefined$: the line number where the definition of the function - ends. - #o#$what$: the string$"Lua"$if the function is a Lua function,$"C"$if it is - a C function,$"main"$if it is the main part of a chunk, and$"tail"$if it - was a function that did a tail call. In the latter case, Lua has no - other information about the function. - #o#$currentline$: the current line where the given function is executing. - When no line information is available,$currentline$is set to -1. - #o#$name$: a reasonable name for the given function. Because functions in - Lua are first-class values, they do not have a fixed name: some - functions may be the value of multiple global variables, while others - may be stored only in a table field. The$lua_getinfo$function checks how - the function was called to find a suitable name. If it cannot find a - name, then$name$is set to$NULL$. - #o#$namewhat$: explains the$name$field. The value of$namewhat$can be - $"global"$,$"local"$,$"method"$,$"field"$,$"upvalue"$, or$""$(the empty - string), according to how the function was called. (Lua uses the empty - string when no other option seems to apply.) - #o#$nups$: the number of upvalues of the function. - - -$lua_gethook$ *lrv-lua_gethook* -------------- -> - lua_Hook lua_gethook (lua_State *L); -> -Returns the current hook function. - - -$lua_gethookcount$ *lrv-lua_gethookcount* ------------------- -> - int lua_gethookcount (lua_State *L); -> -Returns the current hook count. - - -$lua_gethookmask$ *lrv-lua_gethookmask* -> - int lua_gethookmask (lua_State *L); -> -Returns the current hook mask. - - -$lua_getinfo$ *lrv-lua_getinfo* -------------- -> - int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); -> -Returns information about a specific function or function invocation. - -To get information about a function invocation, the parameter$ar$must be a -valid activation record that was filled by a previous call to$lua_getstack$ -(see |lrv-lua_getstack|) or given as argument to a hook (see |lrv-lua_Hook|). - -To get information about a function you push it onto the stack and start the -$what$string with the character $'>'$. (In that case,$lua_getinfo$pops the -function in the top of the stack.) For instance, to know in which line a -function$f$was defined, you can write the following code: -> - lua_Debug ar; - lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* get global 'f' */ - lua_getinfo(L, ">S", &ar); - printf("%d\n", ar.linedefined); -> -Each character in the string$what$selects some fields of the structure$ar$to -be filled or a value to be pushed on the stack: - - #o#$'n'$: fills in the field$name$and$namewhat$; - #o#$'S'$: fills in the fields$source$,$short_src$,$linedefined$, - $lastlinedefined$, and$what$; - #o#$'l'$: fills in the field$currentline$; - #o#$'u'$: fills in the field$nups$; - #o#$'f'$: pushes onto the stack the function that is running at the given - level; - #o#$'L'$: pushes onto the stack a table whose indices are the numbers of the - lines that are valid on the function. (A@valid line@is a line with some - associated code, that is, a line where you can put a break point. - Non-valid lines include empty lines and comments.) - -This function returns 0 on error (for instance, an invalid option in$what$). - - -$lua_getlocal$ *lrv-lua_getlocal* --------------- -> - const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n); -> -Gets information about a local variable of a given activation record. The -parameter$ar$must be a valid activation record that was filled by a previous -call to$lua_getstack$(see |lrv-lua_getstack|) or given as argument to a hook -(see |lrv-lua_Hook|). The index$n$selects which local variable to inspect (1 -is the first parameter or active local variable, and so on, until the last -active local variable).$lua_getlocal$pushes the variable's value onto the -stack and returns its name. - -Variable names starting with$'('$(open parentheses) represent internal -variables (loop control variables, temporaries, and C function locals). - -Returns$NULL$(and pushes nothing) when the index is greater than the number of -active local variables. - - -$lua_getstack$ *lrv-lua_getstack* --------------- -> - int lua_getstack (lua_State *L, int level, lua_Debug *ar); -> -Gets information about the interpreter runtime stack. - -This function fills parts of a$lua_Debug$(see |lrv-lua_Debug|) structure with -an identification of the@activation record@of the function executing at a -given level. Level 0 is the current running function, whereas level@n+1@is the -function that has called level@n@. When there are no errors,$lua_getstack$ -returns 1; when called with a level greater than the stack depth, it -returns 0. - - -$lua_getupvalue$ *lrv-lua_getupvalue* ----------------- -> - const char *lua_getupvalue (lua_State *L, int funcindex, int n); -> -Gets information about a closure's upvalue. (For Lua functions, upvalues are -the external local variables that the function uses, and that are consequently -included in its closure.)$lua_getupvalue$gets the index$n$of an upvalue, -pushes the upvalue's value onto the stack, and returns its name.$funcindex$ -points to the closure in the stack. (Upvalues have no particular order, as -they are active through the whole function. So, they are numbered in an -arbitrary order.) - -Returns$NULL$(and pushes nothing) when the index is greater than the number of -upvalues. For C functions, this function uses the empty string$""$as a name -for all upvalues. - - -$lua_Hook$ *lrv-lua_Hook* ----------- -> - typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); -> -Type for debugging hook functions. - - -Whenever a hook is called, its$ar$argument has its field$event$set to the -specific event that triggered the hook. Lua identifies these events with the -following constants:$LUA_HOOKCALL$,$LUA_HOOKRET$,$LUA_HOOKTAILRET$, -$LUA_HOOKLINE$, and$LUA_HOOKCOUNT$. Moreover, for line events, the field -$currentline$is also set. To get the value of any other field in$ar$, the hook -must call$lua_getinfo$(see |lrv-lua_getinfo|). For return events,$event$may be -$LUA_HOOKRET$, the normal value, or$LUA_HOOKTAILRET$. In the latter case, Lua -is simulating a return from a function that did a tail call; in this case, it -is useless to call$lua_getinfo$. - -While Lua is running a hook, it disables other calls to hooks. Therefore, if a -hook calls back Lua to execute a function or a chunk, this execution occurs -without any calls to hooks. - - -$lua_sethook$ *lrv-lua_sethook* -------------- -> - int lua_sethook (lua_State *L, lua_Hook f, int mask, int count); -> -Sets the debugging hook function. - -Argument$f$is the hook function.$mask$specifies on which events the hook will -be called: it is formed by a bitwise@or@of the constants$LUA_MASKCALL$, -$LUA_MASKRET$,$LUA_MASKLINE$, and$LUA_MASKCOUNT$. The$count$argument is only -meaningful when the mask includes$LUA_MASKCOUNT$. For each event, the hook is -called as explained below: - - #o##The call hook#: is called when the interpreter calls a function. The - hook is called just after Lua enters the new function, before the - function gets its arguments. - #o##The return hook#: is called when the interpreter returns from a - function. The hook is called just before Lua leaves the function. You - have no access to the values to be returned by the function. - #o##The line hook#: is called when the interpreter is about to start the - execution of a new line of code, or when it jumps back in the code (even - to the same line). (This event only happens while Lua is executing a Lua - function.) - #o##The count hook#: is called after the interpreter executes every$count$ - instructions. (This event only happens while Lua is executing a Lua - function.) - -A hook is disabled by setting$mask$to zero. - - -$lua_setlocal$ *lrv-lua_setlocal* --------------- -> - const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n); -> -Sets the value of a local variable of a given activation record. Parameters$ar$ -and$n$are as in$lua_getlocal$(see |lrv-lua_getlocal|).$lua_setlocal$assigns -the value at the top of the stack to the variable and returns its name. It -also pops the value from the stack. - -Returns$NULL$(and pops nothing) when the index is greater than the number of -active local variables. - - -$lua_setupvalue$ *lrv-lua_setupvalue* ----------------- -> - const char *lua_setupvalue (lua_State *L, int funcindex, int n); -> -Sets the value of a closure's upvalue. It assigns the value at the top of the -stack to the upvalue and returns its name. It also pops the value from the -stack. Parameters$funcindex$and$n$are as in the$lua_getupvalue$(see -|lrv-lua_getupvalue|). - -Returns$NULL$(and pops nothing) when the index is greater than the number of -upvalues. - - - *lrv-debugexample* -As an example, the following function lists the names of all local variables -and upvalues for a function at a given level of the stack: -> - int listvars (lua_State *L, int level) { - lua_Debug ar; - int i; - const char *name; - if (lua_getstack(L, level, &ar) == 0) - return 0; /* failure: no such level in the stack */ - i = 1; - while ((name = lua_getlocal(L, &ar, i++)) != NULL) { - printf("local %d %s\n", i-1, name); - lua_pop(L, 1); /* remove variable value */ - } - lua_getinfo(L, "f", &ar); /* retrieves function */ - i = 1; - while ((name = lua_getupvalue(L, -1, i++)) != NULL) { - printf("upvalue %d %s\n", i-1, name); - lua_pop(L, 1); /* remove upvalue value */ - } - return 1; - } -> - -============================================================================== -4 THE AUXILIARY LIBRARY *lrv-aux* -============================================================================== - - -The@auxiliary library@provides several convenient functions to interface C -with Lua. While the basic API provides the primitive functions for all -interactions between C and Lua, the auxiliary library provides higher-level -functions for some common tasks. - -All functions from the auxiliary library are defined in header file$lauxlib.h$ -and have a prefix$luaL_$. - -All functions in the auxiliary library are built on top of the basic API, and -so they provide nothing that cannot be done with this API. - -Several functions in the auxiliary library are used to check C function -arguments. Their names are always$luaL_check*$or$luaL_opt*$. All of these -functions raise an error if the check is not satisfied. Because the error -message is formatted for arguments (e.g.,$"bad argument #1"$), you should not -use these functions for other stack values. - - -============================================================================== -4.1 Functions and Types *lrv-auxFunctions* - - -Here we list all functions and types from the auxiliary library in -alphabetical order. - - -$luaL_addchar$ *lrv-luaL_addchar* --------------- -> - void luaL_addchar (luaL_Buffer *B, char c); -> -Adds the character$c$to the buffer$B$(see |lrv-luaL_Buffer|). - - -$luaL_addlstring$ *lrv-luaL_addlstring* ------------------ -> - void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l); -> -Adds the string pointed to by$s$with length$l$to the buffer$B$(see -|lrv-luaL_Buffer|). The string may contain embedded zeros. - - -$luaL_addsize$ *lrv-luaL_addsize* --------------- -> - void luaL_addsize (luaL_Buffer *B, size_t n); -> -Adds to the buffer$B$(see |lrv-luaL_Buffer|) a string of length$n$previously -copied to the buffer area (see |lrv-luaL_prepbuffer|). - - -$luaL_addstring$ *lrv-luaL_addstring* ----------------- -> - void luaL_addstring (luaL_Buffer *B, const char *s); -> -Adds the zero-terminated string pointed to by$s$to the buffer$B$(see -|lrv-luaL_Buffer|). The string may not contain embedded zeros. - - -$luaL_addvalue$ *lrv-luaL_addvalue* ---------------- -> - void luaL_addvalue (luaL_Buffer *B); -> -Adds the value at the top of the stack to the buffer$B$(see -|lrv-luaL_Buffer|). Pops the value. - -This is the only function on string buffers that can (and must) be called with -an extra element on the stack, which is the value to be added to the buffer. - - -$luaL_argcheck$ *lrv-luaL_argcheck* ---------------- -> - void luaL_argcheck (lua_State *L, - int cond, - int narg, - const char *extramsg); -> -Checks whether$cond$is true. If not, raises an error with the following -message, where$func$is retrieved from the call stack: -> - bad argument #<narg> to <func> (<extramsg>) -> - -$luaL_argerror$ *lrv-luaL_argerror* ---------------- -> - int luaL_argerror (lua_State *L, int narg, const char *extramsg); -> -Raises an error with the following message, where$func$is retrieved from the -call stack: -> - bad argument #<narg> to <func> (<extramsg>) -> -This function never returns, but it is an idiom to use it in C functions as -$return luaL_argerror($@args@$)$. - - -$luaL_Buffer$ *lrv-luaL_Buffer* -------------- -> - typedef struct luaL_Buffer luaL_Buffer; -> -Type for a@string buffer@. - -A string buffer allows C code to build Lua strings piecemeal. Its pattern of -use is as follows: - - #o# First you declare a variable$b$of type$luaL_Buffer$. - #o# Then you initialize it with a call$luaL_buffinit(L, &b)$(see - |lrv-luaL_buffinit|). - #o# Then you add string pieces to the buffer calling any of the$luaL_add*$ - functions. - #o# You finish by calling$luaL_pushresult(&b)$(see |lrv-luaL_pushresult|). - This call leaves the final string on the top of the stack. - -During its normal operation, a string buffer uses a variable number of stack -slots. So, while using a buffer, you cannot assume that you know where the top -of the stack is. You can use the stack between successive calls to buffer -operations as long as that use is balanced; that is, when you call a buffer -operation, the stack is at the same level it was immediately after the -previous buffer operation. (The only exception to this rule is -$luaL_addvalue$|lrv-luaL_addvalue|.) After calling$luaL_pushresult$the stack -is back to its level when the buffer was initialized, plus the final string on -its top. - - -$luaL_buffinit$ *lrv-luaL_buffinit* ---------------- -> - void luaL_buffinit (lua_State *L, luaL_Buffer *B); -> -Initializes a buffer$B$. This function does not allocate any space; the buffer -must be declared as a variable (see |lrv-luaL_Buffer|). - - -$luaL_callmeta$ *lrv-luaL_callmeta* ---------------- -> - int luaL_callmeta (lua_State *L, int obj, const char *e); -> -Calls a metamethod. - -If the object at index$obj$has a metatable and this metatable has a field$e$, -this function calls this field and passes the object as its only argument. In -this case this function returns 1 and pushes onto the stack the value returned -by the call. If there is no metatable or no metamethod, this function returns -0 (without pushing any value on the stack). - - -$luaL_checkany$ *lrv-luaL_checkany* ---------------- -> - void luaL_checkany (lua_State *L, int narg); -> -Checks whether the function has an argument of any type (including#nil#) at -position$narg$. - - -$luaL_checkint$ *lrv-luaL_checkint* ---------------- -> - int luaL_checkint (lua_State *L, int narg); -> -Checks whether the function argument$narg$is a number and returns this number -cast to an$int$. - - -$luaL_checkinteger$ *lrv-luaL_checkinteger* -------------------- -> - lua_Integer luaL_checkinteger (lua_State *L, int narg); -> -Checks whether the function argument$narg$is a number and returns this number -cast to a$lua_Integer$(see |lrv-lua_Integer|). - - -$luaL_checklong$ *lrv-luaL_checklong* ----------------- -> - long luaL_checklong (lua_State *L, int narg); -> -Checks whether the function argument$narg$is a number and returns this number -cast to a$long$. - - -$luaL_checklstring$ *lrv-luaL_checklstring* -------------------- -> - const char *luaL_checklstring (lua_State *L, int narg, size_t *l); -> -Checks whether the function argument$narg$is a string and returns this string; -if$l$is not$NULL$fills$*l$with the string's length. - - -$luaL_checknumber$ *lrv-luaL_checknumber* ------------------- -> - lua_Number luaL_checknumber (lua_State *L, int narg); -> -Checks whether the function argument$narg$is a number and returns this number -(see |lrv-lua_Number|). - - -$luaL_checkoption$ *lrv-luaL_checkoption* ------------------- -> - int luaL_checkoption (lua_State *L, - int narg, - const char *def, - const char *const lst[]); -> -Checks whether the function argument$narg$is a string and searches for this -string in the array$lst$(which must be NULL-terminated). Returns the index in -the array where the string was found. Raises an error if the argument is not a -string or if the string cannot be found. - -If$def$is not$NULL$, the function uses$def$as a default value when there is no -argument$narg$or if this argument is#nil#. - -This is a useful function for mapping strings to C enums. (The usual -convention in Lua libraries is to use strings instead of numbers to select -options.) - - -$luaL_checkstack$ *lrv-luaL_checkstack* ------------------ -> - void luaL_checkstack (lua_State *L, int sz, const char *msg); -> -Grows the stack size to$top + sz$elements, raising an error if the stack -cannot grow to that size.$msg$is an additional text to go into the error -message. - - -$luaL_checkstring$ *lrv-luaL_checkstring* ------------------- -> - const char *luaL_checkstring (lua_State *L, int narg); -> -Checks whether the function argument$narg$is a string and returns this string. - - -$luaL_checktype$ *lrv-luaL_checktype* ----------------- -> - void luaL_checktype (lua_State *L, int narg, int t); -> -Checks whether the function argument$narg$has type$t$(see |lrv-lua_type|). - - -$luaL_checkudata$ *lrv-luaL_checkudata* ------------------ -> - void *luaL_checkudata (lua_State *L, int narg, const char *tname); -> -Checks whether the function argument$narg$is a userdata of the type$tname$ -(see |lrv-luaL_newmetatable|). - - -$luaL_dofile$ *lrv-luaL_dofile* -------------- -> - int luaL_dofile (lua_State *L, const char *filename); -> -Loads and runs the given file. It is defined as the following macro: -> - (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) -> -It returns 0 if there are no errors or 1 in case of errors. - - -$luaL_dostring$ *lrv-luaL_dostring* ---------------- -> - int luaL_dostring (lua_State *L, const char *str); -> -Loads and runs the given string. It is defined as the following macro: -> - (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0)) -> -It returns 0 if there are no errors or 1 in case of errors. - - -$luaL_error$ *lrv-luaL_error* ------------- -> - int luaL_error (lua_State *L, const char *fmt, ...); -> -Raises an error. The error message format is given by$fmt$plus any extra -arguments, following the same rules of$lua_pushfstring$(see -|lrv-lua_pushfstring|). It also adds at the beginning of the message the file -name and the line number where the error occurred, if this information is -available. - -This function never returns, but it is an idiom to use it in C functions as -$return luaL_error($@args@$)$. - - -$luaL_getmetafield$ *lrv-luaL_getmetafield* -------------------- -> - int luaL_getmetafield (lua_State *L, int obj, const char *e); -> -Pushes onto the stack the field$e$from the metatable of the object at index -$obj$. If the object does not have a metatable, or if the metatable does not -have this field, returns 0 and pushes nothing. - - -$luaL_getmetatable$ *lrv-luaL_getmetatable* -------------------- -> - void luaL_getmetatable (lua_State *L, const char *tname); -> -Pushes onto the stack the metatable associated with name$tname$in the registry -(see |lrv-luaL_newmetatable|). - - -$luaL_gsub$ *lrv-luaL_gsub* ------------ -> - const char *luaL_gsub (lua_State *L, - const char *s, - const char *p, - const char *r); -> -Creates a copy of string$s$by replacing any occurrence of the string$p$with -the string$r$. Pushes the resulting string on the stack and returns it. - - -$luaL_loadbuffer$ *lrv-luaL_loadbuffer* ------------------ -> - int luaL_loadbuffer (lua_State *L, - const char *buff, - size_t sz, - const char *name); -> -Loads a buffer as a Lua chunk. This function uses$lua_load$(see -|lrv-lua_load|) to load the chunk in the buffer pointed to by$buff$with size -$sz$. - -This function returns the same results as$lua_load$.$name$is the chunk name, -used for debug information and error messages. - - -$luaL_loadfile$ *lrv-luaL_loadfile* ---------------- -> - int luaL_loadfile (lua_State *L, const char *filename); -> -Loads a file as a Lua chunk. This function uses$lua_load$(see |lrv-lua_load|) -to load the chunk in the file named$filename$. If$filename$is$NULL$, then it -loads from the standard input. The first line in the file is ignored if it -starts with a$#$. - -This function returns the same results as$lua_load$, but it has an extra error -code$LUA_ERRFILE$if it cannot open/read the file. - -As$lua_load$, this function only loads the chunk; it does not run it. - - -$luaL_loadstring$ *lrv-luaL_loadstring* ------------------ -> - int luaL_loadstring (lua_State *L, const char *s); -> -Loads a string as a Lua chunk. This function uses$lua_load$(see -|lrv-lua_load|) to load the chunk in the zero-terminated string$s$. - -This function returns the same results as$lua_load$. - -Also as$lua_load$, this function only loads the chunk; it does not run it. - - -$luaL_newmetatable$ *lrv-luaL_newmetatable* -------------------- -> - int luaL_newmetatable (lua_State *L, const char *tname); -> -If the registry already has the key$tname$, returns 0. Otherwise, creates a -new table to be used as a metatable for userdata, adds it to the registry with -key$tname$, and returns 1. - -In both cases pushes onto the stack the final value associated with$tname$in -the registry. - - -$luaL_newstate$ *lrv-luaL_newstate* ---------------- -> - lua_State *luaL_newstate (void); -> -Creates a new Lua state. It calls$lua_newstate$(see |lrv-lua_newstate|) with an -allocator based on the standard C$realloc$function and then sets a panic -function (see |lrv-lua_atpanic|) that prints an error message to the standard -error output in case of fatal errors. - -Returns the new state, or$NULL$if there is a memory allocation error. - - -$luaL_openlibs$ *lrv-luaL_openlibs* ---------------- -> - void luaL_openlibs (lua_State *L); -> -Opens all standard Lua libraries into the given state. See also -|lrv-openlibs| for details on how to open individual libraries. - - -$luaL_optint$ *lrv-luaL_optint* -------------- -> - int luaL_optint (lua_State *L, int narg, int d); -> -If the function argument$narg$is a number, returns this number cast to an -$int$. If this argument is absent or is#nil#, returns$d$. Otherwise, raises an -error. - - -$luaL_optinteger$ *lrv-luaL_optinteger* ------------------ -> - lua_Integer luaL_optinteger (lua_State *L, - int narg, - lua_Integer d); -> -If the function argument$narg$is a number, returns this number cast to a -$lua_Integer$(see |lrv-lua_Integer|). If this argument is absent or is#nil#, -returns$d$. Otherwise, raises an error. - - -$luaL_optlong$ *lrv-luaL_optlong* --------------- -> - long luaL_optlong (lua_State *L, int narg, long d); -> -If the function argument$narg$is a number, returns this number cast to a -$long$. If this argument is absent or is#nil#, returns$d$. Otherwise, raises -an error. - - -$luaL_optlstring$ *lrv-luaL_optlstring* ------------------ -> - const char *luaL_optlstring (lua_State *L, - int narg, - const char *d, - size_t *l); -> -If the function argument$narg$is a string, returns this string. If this -argument is absent or is#nil#, returns$d$. Otherwise, raises an error. - -If$l$is not$NULL$, fills the position$*l$with the results's length. - - -$luaL_optnumber$ *lrv-luaL_optnumber* ----------------- -> - lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d); -> -If the function argument$narg$is a number, returns this number. If this -argument is absent or is#nil#, returns$d$. Otherwise, raises an error. - - -$luaL_optstring$ *lrv-luaL_optstring* ----------------- -> - const char *luaL_optstring (lua_State *L, - int narg, - const char *d); -> -If the function argument$narg$is a string, returns this string. If this -argument is absent or is#nil#, returns$d$. Otherwise, raises an error. - - -$luaL_prepbuffer$ *lrv-luaL_prepbuffer* ------------------ -> - char *luaL_prepbuffer (luaL_Buffer *B); -> -Returns an address to a space of size$LUAL_BUFFERSIZE$where you can copy a -string to be added to buffer$B$(see |lrv-luaL_Buffer|). After copying the -string into this space you must call$luaL_addsize$(see |lrv-luaL_addsize|) -with the size of the string to actually add it to the buffer. - - -$luaL_pushresult$ *lrv-luaL_pushresult* ------------------ -> - void luaL_pushresult (luaL_Buffer *B); -> -Finishes the use of buffer$B$leaving the final string on the top of the stack. - - -$luaL_ref$ *lrv-luaL_ref* ----------- -> - int luaL_ref (lua_State *L, int t); -> -Creates and returns a@reference@, in the table at index$t$, for the object at -the top of the stack (and pops the object). - -A reference is a unique integer key. As long as you do not manually add -integer keys into table$t$,$luaL_ref$ensures the uniqueness of the key it -returns. You can retrieve an object referred by reference$r$by calling -$lua_rawgeti(L, t, r)$(see |lrv-lua_rawgeti|). Function$luaL_unref$(see -|lrv-luaL_unref|) frees a reference and its associated object. - -If the object at the top of the stack is#nil#,$luaL_ref$returns the constant -$LUA_REFNIL$. The constant$LUA_NOREF$is guaranteed to be different from any -reference returned by$luaL_ref$. - - -$luaL_Reg$ *lrv-luaL_Reg* ----------- -> - typedef struct luaL_Reg { - const char *name; - lua_CFunction func; - } luaL_Reg; -> -Type for arrays of functions to be registered by$luaL_register$ (see -|lrv-luaL_register|).$name$is the function name and$func$is a pointer to the -function. Any array of$luaL_Reg$must end with a sentinel entry in which both -$name$and$func$are$NULL$. - - -$luaL_register$ *lrv-luaL_register* ---------------- -> - void luaL_register (lua_State *L, - const char *libname, - const luaL_Reg *l); -> -Opens a library. - -When called with$libname$equal to$NULL$, it simply registers all functions in -the list$l$(see |lrv-luaL_Reg|) into the table on the top of the stack. - -When called with a non-null$libname$,$luaL_register$creates a new table$t$, -sets it as the value of the global variable$libname$, sets it as the value of -$package.loaded[libname]$, and registers on it all functions in the list$l$. -If there is a table in$package.loaded[libname]$or in variable$libname$, reuses -this table instead of creating a new one. - -In any case the function leaves the table on the top of the stack. - - -$luaL_typename$ *lrv-luaL_typename* ---------------- -> - const char *luaL_typename (lua_State *L, int idx); -> -Returns the name of the type of the value at index$idx$. - - -$luaL_typerror$ *lrv-luaL_typerror* ---------------- -> - int luaL_typerror (lua_State *L, int narg, const char *tname); -> -Generates an error with a message like the following: - - @location@$: bad argument$@narg@$to$@'func'@$($@tname@$expected, got$@rt@$)$ - -where@location@is produced by$luaL_where$ (see |lrv-luaL_where|),@func@is the -name of the current function, and@rt@is the type name of the actual argument. - - -$luaL_unref$ *lrv-luaL_unref* ------------- -> - void luaL_unref (lua_State *L, int t, int ref); -> -Releases reference$ref$from the table at index$t$(see |lrv-luaL_ref|). -The entry is removed from the table, so that the referred object can be -collected. The reference$ref$is also freed to be used again. - -If$ref$is$LUA_NOREF$or$LUA_REFNIL$,$luaL_unref$does nothing. - - -$luaL_where$ *lrv-luaL_where* ------------- -> - void luaL_where (lua_State *L, int lvl); -> -Pushes onto the stack a string identifying the current position of the control -at level$lvl$in the call stack. Typically this string has the following -format: - - @chunkname:currentline:@ - -Level 0 is the running function, level 1 is the function that called the -running function, etc. - -This function is used to build a prefix for error messages. - - -============================================================================== -5 STANDARD LIBRARIES *lrv-Lib* -============================================================================== - - -The standard libraries provide useful functions that are implemented directly -through the C API. Some of these functions provide essential services to the -language (e.g.,$type$and$getmetatable$); others provide access to "outside" -services (e.g., I/O); and others could be implemented in Lua itself, but are -quite useful or have critical performance requirements that deserve an -implementation in C (e.g.,$sort$). - -All libraries are implemented through the official C API and are provided as -separate C modules. Currently, Lua has the following standard libraries: - - #o# basic library; - #o# package library; - #o# string manipulation; - #o# table manipulation; - #o# mathematical functions (sin, log, etc.); - #o# input and output; - #o# operating system facilities; - #o# debug facilities. - -Except for the basic and package libraries, each library provides all its -functions as fields of a global table or as methods of its objects. - - *lrv-openlibs* -To have access to these libraries, the C host program should call the -$luaL_openlibs$function, which opens all standard libraries (see -|lrv-luaL_openlibs|). Alternatively, the host program can open the libraries -individually by calling$luaopen_base$(for the basic library), -$luaopen_package$(for the package library),$luaopen_string$(for the string -library),$luaopen_table$(for the table library),$luaopen_math$(for the -mathematical library),$luaopen_io$(for the I/O and the Operating System -libraries), and$luaopen_debug$(for the debug library). These functions are -declared in$lualib.h$and should not be called directly: you must call them -like any other Lua C function, e.g., by using$lua_call$(see |lrv-lua_call|). - - -============================================================================== -5.1 Basic Functions *lrv-libBasic* - - -The basic library provides some core functions to Lua. If you do not include -this library in your application, you should check carefully whether you need -to provide implementations for some of its facilities. - - -$assert (v [, message])$ *lrv-assert* ------------------------- -Issues an error when the value of its argument$v$is false (i.e.,#nil#or -#false#); otherwise, returns all its arguments.$message$is an error message; -when absent, it defaults to "assertion failed!" - - -$collectgarbage (opt [, arg])$ *lrv-collectgarbage* ------------------------------- -This function is a generic interface to the garbage collector. It performs -different functions according to its first argument,$opt$: - - #o##"stop"#: stops the garbage collector. - #o##"restart"#: restarts the garbage collector. - #o##"collect"#: performs a full garbage-collection cycle. - #o##"count"#: returns the total memory in use by Lua (in Kbytes). - #o##"step"#: performs a garbage-collection step. The step "size" is - controlled by$arg$(larger values mean more steps) in a non-specified - way. If you want to control the step size you must experimentally tune - the value of$arg$. Returns#true#if the step finished a collection cycle. - #o##"setpause"#: sets$arg$/100 as the new value for the@pause@of the - collector (see |lrv-langGC|). - #o##"setstepmul"#: sets$arg$/100 as the new value for the@step multiplier@of - the collector (see |lrv-langGC|). - - -$dofile (filename)$ *lrv-dofile* -------------------- -Opens the named file and executes its contents as a Lua chunk. When called -without arguments,$dofile$executes the contents of the standard input -($stdin$). Returns all values returned by the chunk. In case of -errors,$dofile$propagates the error to its caller (that is,$dofile$does not -run in protected mode). - - -$error (message [, level])$ *lrv-error* ---------------------------- -Terminates the last protected function called and returns$message$as the error -message. Function$error$never returns. - -Usually,$error$adds some information about the error position at the beginning -of the message. The$level$argument specifies how to get the error position. -With level 1 (the default), the error position is where the$error$function was -called. Level 2 points the error to where the function that called$error$was -called; and so on. Passing a level 0 avoids the addition of error position -information to the message. - - -$_G$ *lrv-_G* ------ -A global variable (not a function) that holds the global environment (that -is,$_G._G = _G$). Lua itself does not use this variable; changing its value -does not affect any environment, nor vice-versa. (Use$setfenv$to change -environments.) - - -$getfenv (f)$ *lrv-getfenv* -------------- -Returns the current environment in use by the function.$f$can be a Lua -function or a number that specifies the function at that stack level: -Level 1 is the function calling$getfenv$. If the given function is not a Lua -function, or if$f$is 0,$getfenv$returns the global environment. The default -for$f$is 1. - - -$getmetatable (object)$ *lrv-getmetatable* ------------------------ -If$object$does not have a metatable, returns#nil#. Otherwise, if the object's -metatable has a$"__metatable"$field, returns the associated value. Otherwise, -returns the metatable of the given object. - - -$ipairs (t)$ *lrv-ipairs* ------------- -Returns three values: an iterator function, the table$t$, and 0, so that the -construction - - $for i,v in ipairs(t) do$@body@$end$ - -will iterate over the pairs ($1,t[1]$), ($2,t[2]$), ..., up to the first -integer key absent from the table. - - -$load (func [, chunkname])$ *lrv-load* ---------------------------- -Loads a chunk using function$func$to get its pieces. Each call to$func$must -return a string that concatenates with previous results. A return of#nil#(or -no value) signals the end of the chunk. - -If there are no errors, returns the compiled chunk as a function; otherwise, -returns#nil#plus the error message. The environment of the returned function -is the global environment. - -$chunkname$is used as the chunk name for error messages and debug information. - - -$loadfile ([filename])$ *lrv-loadfile* ------------------------ -Similar to$load$(see |lrv-load|), but gets the chunk from file$filename$or -from the standard input, if no file name is given. - - -$loadstring (string [, chunkname])$ *lrv-loadstring* ------------------------------------ -Similar to$load$(see |lrv-load|), but gets the chunk from the given string. - -To load and run a given string, use the idiom -> - assert(loadstring(s))() -> - -$next (table [, index])$ *lrv-next* ------------------------- -Allows a program to traverse all fields of a table. Its first argument is a -table and its second argument is an index in this table.$next$returns the next -index of the table and its associated value. When called with#nil#as its -second argument,$next$returns an initial index and its associated value. When -called with the last index, or with#nil#in an empty table,$next$returns#nil#. -If the second argument is absent, then it is interpreted as#nil#. In -particular, you can use$next(t)$to check whether a table is empty. - -The order in which the indices are enumerated is not specified,@even for@ -@numeric indices@. (To traverse a table in numeric order, use a numerical#for# -or the$ipairs$|lrv-ipairs| function.) - -The behavior of$next$is@undefined@if, during the traversal, you assign any -value to a non-existent field in the table. You may however modify existing -fields. In particular, you may clear existing fields. - - -$pairs (t)$ *lrv-pairs* ------------ -Returns three values: the$next$|lrv-next| function, the table$t$, and#nil#, so -that the construction - - $for k,v in pairs(t) do$@body@$end$ - -will iterate over all key-value pairs of table$t$. - - -$pcall (f, arg1, ...)$ *lrv-pcall* ----------------------- -Calls function$f$with the given arguments in@protected mode@. This means that -any error inside$f$is not propagated; instead,$pcall$catches the error and -returns a status code. Its first result is the status code (a boolean), which -is#true#if the call succeeds without errors. In such case,$pcall$also returns -all results from the call, after this first result. In case of any error, -$pcall$returns#false#plus the error message. - - -$print (...)$ *lrv-print* -------------- -Receives any number of arguments, and prints their values to$stdout$, using -the$tostring$|lrv-tostring| function to convert them to strings.$print$is not -intended for formatted output, but only as a quick way to show a value, -typically for debugging. For formatted output, use$string.format$(see -|lrv-string.format|). - - -$rawequal (v1, v2)$ *lrv-rawequal* -------------------- -Checks whether$v1$is equal to$v2$, without invoking any metamethod. Returns a -boolean. - - -$rawget (table, index)$ *lrv-rawget* ------------------------ -Gets the real value of$table[index]$, without invoking any metamethod.$table$ -must be a table;$index$may be any value. - - -$rawset (table, index, value)$ *lrv-rawset* ------------------------------- -Sets the real value of$table[index]$to$value$, without invoking any -metamethod.$table$must be a table,$index$any value different from#nil#, -and$value$any Lua value. - -This function returns$table$. - - -$select (index, ...)$ *lrv-select* ---------------------- -If$index$is a number, returns all arguments after argument number$index$. -Otherwise,$index$must be the string$"#"$, and$select$returns the total number -of extra arguments it received. - - -$setfenv (f, table)$ *lrv-setfenv* --------------------- -Sets the environment to be used by the given function.$f$can be a Lua function -or a number that specifies the function at that stack level: Level 1 is the -function calling$setfenv$.$setfenv$returns the given function. - -As a special case, when$f$is 0$setfenv$changes the environment of the running -thread. In this case,$setfenv$returns no values. - - -$setmetatable (table, metatable)$ *lrv-setmetatable* ---------------------------------- -Sets the metatable for the given table. (You cannot change the metatable of -other types from Lua, only from C.) If$metatable$is#nil#, removes the -metatable of the given table. If the original metatable has -a$"__metatable"$field, raises an error. - -This function returns$table$. - - -$tonumber (e [, base])$ *lrv-tonumber* ------------------------ -Tries to convert its argument to a number. If the argument is already a number -or a string convertible to a number, then$tonumber$returns this number; -otherwise, it returns#nil#. - -An optional argument specifies the base to interpret the numeral. The base may -be any integer between 2 and 36, inclusive. In bases above 10, the -letter$'A'$(in either upper or lower case) represents 10,$'B'$represents 11, -and so forth, with$'Z'$representing 35. In base 10 (the default), the number -may have a decimal part, as well as an optional exponent part (see -|lrv-langLexConv|). In other bases, only unsigned integers are accepted. - - -$tostring (e)$ *lrv-tostring* --------------- -Receives an argument of any type and converts it to a string in a reasonable -format. For complete control of how numbers are converted, use$string.format$ -(see |lrv-string.format|). - - *lrv-__tostring* -If the metatable of$e$has a$"__tostring"$field,$tostring$calls the -corresponding value with$e$as argument, and uses the result of the call as its -result. - - -$type (v)$ *lrv-type* ----------- -Returns the type of its only argument, coded as a string. The possible results -of this function are$"nil"$(a string, not the value#nil#),$"number"$, -$"string"$,$"boolean$,$"table"$,$"function"$,$"thread"$, and$"userdata"$. - - -$unpack (list [, i [, j]])$ *lrv-unpack* ---------------------------- -Returns the elements from the given table. This function is equivalent to -> - return list[i], list[i+1], ..., list[j] -> -except that the above code can be written only for a fixed number of elements. -By default,$i$is 1 and$j$is the length of the list, as defined by the length -operator (see |lrv-langLength|). - - -$_VERSION$ *lrv-_VERSION* ----------- -A global variable (not a function) that holds a string containing the current -interpreter version. The current contents of this string is$"Lua 5.1"$. - - -$xpcall (f, err)$ *lrv-xpcall* ------------------ -This function is similar to$pcall$(see |lrv-pcall|), except that you can set a -new error handler. - -$xpcall$calls function$f$in protected mode, using$err$as the error handler. -Any error inside$f$is not propagated; instead,$xpcall$catches the error, calls -the$err$function with the original error object, and returns a status code. -Its first result is the status code (a boolean), which is true if the call -succeeds without errors. In this case,$xpcall$also returns all results from -the call, after this first result. In case of any error,$xpcall$returns#false# -plus the result from$err$. - - -============================================================================== -5.2 Coroutine Manipulation *lrv-libCoro* - - -The operations related to coroutines comprise a sub-library of the basic -library and come inside the table$coroutine$. See |lrv-langCoro| for a general -description of coroutines. - - -$coroutine.create (f)$ *lrv-coroutine.create* ----------------------- -Creates a new coroutine, with body$f$.$f$must be a Lua function. Returns this -new coroutine, an object with type$"thread"$. - - -$coroutine.resume (co [, val1, ...])$ *lrv-coroutine.resume* -------------------------------------- -Starts or continues the execution of coroutine$co$. The first time you resume -a coroutine, it starts running its body. The values$val1$, ... are passed as -arguments to the body function. If the coroutine has yielded,$resume$restarts -it; the values$val1$, ... are passed as the results from the yield. - -If the coroutine runs without any errors,$resume$returns#true#plus any values -passed to$yield$(if the coroutine yields) or any values returned by the body -function (if the coroutine terminates). If there is any error,$resume$returns -#false#plus the error message. - - -$coroutine.running ()$ *lrv-coroutine.running* ----------------------- -Returns the running coroutine, or#nil#when called by the main thread. - - -$coroutine.status (co)$ *lrv-coroutine.status* ------------------------ -Returns the status of coroutine$co$, as a string:$"running"$, if the coroutine -is running (that is, it called$status$);$"suspended"$, if the coroutine is -suspended in a call to$yield$, or if it has not started running yet; -$"normal"$if the coroutine is active but not running (that is, it has resumed -another coroutine); and$"dead"$if the coroutine has finished its body -function, or if it has stopped with an error. - - -$coroutine.wrap (f)$ *lrv-coroutine.wrap* --------------------- -Creates a new coroutine, with body$f$.$f$must be a Lua function. Returns a -function that resumes the coroutine each time it is called. Any arguments -passed to the function behave as the extra arguments to$resume$. Returns the -same values returned by$resume$, except the first boolean. In case of error, -propagates the error. - - -$coroutine.yield (...)$ *lrv-coroutine.yield* ------------------------ -Suspends the execution of the calling coroutine. The coroutine cannot be -running a C function, a metamethod, or an iterator. Any arguments to$yield$are -passed as extra results to$resume$. - - -============================================================================== -5.3 - Modules *lrv-libModule* - - -The package library provides basic facilities for loading and building modules -in Lua. It exports two of its functions directly in the global environment: -$require$and$module$(see |lrv-require| and |lrv-module|). Everything else is -exported in a table$package$. - - -$module (name [, ...])$ *lrv-module* ------------------------ -Creates a module. If there is a table in$package.loaded[name]$, this table is -the module. Otherwise, if there is a global table$t$with the given name, this -table is the module. Otherwise creates a new table$t$and sets it as the value -of the global$name$and the value of$package.loaded[name]$. This function also -initializes$t._NAME$with the given name,$t._M$with the module ($t$itself), and -$t._PACKAGE$with the package name (the full module name minus last component; -see below). Finally,$module$sets$t$as the new environment of the current -function and the new value of$package.loaded[name]$, so that$require$(see -|lrv-require|) returns$t$. - -If$name$is a compound name (that is, one with components separated by dots), -$module$creates (or reuses, if they already exist) tables for each component. -For instance, if$name$is$a.b.c$, then$module$stores the module table in field -$c$of field$b$of global$a$. - -This function may receive optional@options@after the module name, where each -option is a function to be applied over the module. - - -$require (modname)$ *lrv-require* -------------------- -Loads the given module. The function starts by looking into the -$package.loaded$table to determine whether$modname$is already loaded. If it -is, then$require$returns the value stored at$package.loaded[modname]$. -Otherwise, it tries to find a@loader@for the module. - -To find a loader, first$require$queries$package.preload[modname]$. If it has a -value, this value (which should be a function) is the loader. Otherwise -$require$searches for a Lua loader using the path stored in$package.path$. -If that also fails, it searches for a C loader using the path stored in -$package.cpath$. If that also fails, it tries an@all-in-one@loader (see -below). - -When loading a C library,$require$first uses a dynamic link facility to link -the application with the library. Then it tries to find a C function inside -this library to be used as the loader. The name of this C function is the -string$"luaopen_"$concatenated with a copy of the module name where each dot -is replaced by an underscore. Moreover, if the module name has a hyphen, its -prefix up to (and including) the first hyphen is removed. For instance, if the -module name is$a.v1-b.c$, the function name will be$luaopen_b_c$. - -If$require$finds neither a Lua library nor a C library for a module, it calls -the@all-in-one loader@. This loader searches the C path for a library for the -root name of the given module. For instance, when requiring$a.b.c$, it will -search for a C library for$a$. If found, it looks into it for an open function -for the submodule; in our example, that would be$luaopen_a_b_c$. With this -facility, a package can pack several C submodules into one single library, -with each submodule keeping its original open function. - -Once a loader is found,$require$calls the loader with a single argument, -$modname$. If the loader returns any value,$require$assigns the returned value -to$package.loaded[modname]$. If the loader returns no value and has not -assigned any value to$package.loaded[modname]$, then$require$assigns#true#to -this entry. In any case,$require$returns the final value of -$package.loaded[modname]$. - -If there is any error loading or running the module, or if it cannot find any -loader for the module, then$require$signals an error. - - -$package.cpath$ *lrv-package.cpath* ---------------- -The path used by$require$to search for a C loader. - -Lua initializes the C path$package.cpath$in the same way it initializes the -Lua path$package.path$, using the environment variable$LUA_CPATH$(plus another -default path defined in$luaconf.h$). - - -$package.loaded$ *lrv-package.loaded* ----------------- -A table used by$require$to control which modules are already loaded. When you -require a module$modname$and$package.loaded[modname]$is not false,$require$ -simply returns the value stored there. - - -$package.loadlib (libname, funcname)$ *lrv-package.loadlib* -------------------------------------- -Dynamically links the host program with the C library$libname$. Inside this -library, looks for a function$funcname$and returns this function as a -C function. (So,$funcname$must follow the protocol (see |lrv-lua_CFunction|)). - -This is a low-level function. It completely bypasses the package and module -system. Unlike$require$, it does not perform any path searching and does not -automatically adds extensions.$libname$must be the complete file name of the -C library, including if necessary a path and extension.$funcname$must be the -exact name exported by the C library (which may depend on the C compiler and -linker used). - -This function is not supported by ANSI C. As such, it is only available on -some platforms (Windows, Linux, Mac OS X, Solaris, BSD, plus other Unix -systems that support the$dlfcn$standard). - - -$package.path$ *lrv-package.path* --------------- -The path used by$require$to search for a Lua loader. - -At start-up, Lua initializes this variable with the value of the environment -variable$LUA_PATH$or with a default path defined in$luaconf.h$, if the -environment variable is not defined. Any$";;"$in the value of the environment -variable is replaced by the default path. - -A path is a sequence of@templates@separated by semicolons. For each template, -$require$will change each interrogation mark in the template by$filename$, -which is$modname$with each dot replaced by a "directory separator" (such as -$"/"$ in Unix); then it will try to load the resulting file name. So, for -instance, if the Lua path is -> - "./?.lua;./?.lc;/usr/local/?/init.lua" -> -the search for a Lua loader for module$foo$will try to load the files -$./foo.lua$,$./foo.lc$, and$/usr/local/foo/init.lua$, in that order. - - -$package.preload$ *lrv-package.preload* ------------------ -A table to store loaders for specific modules (see |lrv-require|). - - -$package.seeall (module)$ *lrv-package.seeall* -------------------------- -Sets a metatable for$module$with its$__index$field referring to the global -environment, so that this module inherits values from the global environment. -To be used as an option to function$module$. - - -============================================================================== -5.4 - String Manipulation *lrv-libString* - - -This library provides generic functions for string manipulation, such as -finding and extracting substrings, and pattern matching. When indexing a -string in Lua, the first character is at position 1 (not at 0, as in C). -Indices are allowed to be negative and are interpreted as indexing backwards, -from the end of the string. Thus, the last character is at position -1, and -so on. - -The string library provides all its functions inside the table$string$. -It also sets a metatable for strings where the$__index$field points to the -$string$table. Therefore, you can use the string functions in object-oriented -style. For instance,$string.byte(s, i)$can be written as$s:byte(i)$. - - - -$string.byte (s [, i [, j]])$ *lrv-string.byte* ------------------------------ -Returns the internal numerical codes of the characters$s[i]$,$s[i+1]$,..., -$s[j]$. The default value for$i$is 1; the default value for$j$is$i$. - -Note that numerical codes are not necessarily portable across platforms. - - -$string.char (...)$ *lrv-string.char* -------------------- -Receives zero or more integers. Returns a string with length equal to the -number of arguments, in which each character has the internal numerical code -equal to its correspondent argument. - -Note that numerical codes are not necessarily portable across platforms. - - -$string.dump (function)$ *lrv-string.dump* ------------------------- -Returns a string containing a binary representation of the given function, so -that a later$loadstring$on this string returns a copy of the function. -$function$must be a Lua function without upvalues. - - -$string.find (s, pattern [, init [, plain]])$ *lrv-string.find* ---------------------------------------------- -Looks for the first match of$pattern$in the string$s$. If it finds a match, -then$find$returns the indices of$s$where this occurrence starts and ends; -otherwise, it returns#nil#. A third, optional numerical argument$init$ -specifies where to start the search; its default value is 1 and may be -negative. A value of#true#as a fourth, optional argument$plain$turns off the -pattern matching facilities, so the function does a plain "find substring" -operation, with no characters in$pattern$being considered "magic". Note that -if$plain$is given, then$init$must be given as well. - - -If the pattern has captures, then in a successful match the captured values -are also returned, after the two indices. - - -$string.format (formatstring, ...)$ *lrv-string.format* ------------------------------------ -Returns a formatted version of its variable number of arguments following the -description given in its first argument (which must be a string). The format -string follows the same rules as the$printf$family of standard C functions. -The only differences are that the options/modifiers$*$,$l$,$L$,$n$,$p$, and$h$ -are not supported and that there is an extra option,$q$. The$q$option formats -a string in a form suitable to be safely read back by the Lua interpreter: the -string is written between double quotes, and all double quotes, newlines, -embedded zeros, and backslashes in the string are correctly escaped when -written. For instance, the call -> - string.format('%q', 'a string with "quotes" and \n new line') -> -will produce the string: -> - "a string with \"quotes\" and \ - new line" -> -The options$c$,$d$,$E$,$e$,$f$,$g$,$G$,$i$,$o$,$u$,$X$, and$x$all expect a -number as argument, whereas$q$and$s$expect a string. - -This function does not accept string values containing embedded zeros. - - -$string.gmatch (s, pattern)$ *lrv-string.gmatch* ----------------------------- -Returns an iterator function that, each time it is called, returns the next -captures from$pattern$over string$s$. - -If$pattern$specifies no captures, then the whole match is produced in each -call. - -As an example, the following loop -> - s = "hello world from Lua" - for w in string.gmatch(s, "%a+") do - print(w) - end -> -will iterate over all the words from string$s$, printing one per line. -The next example collects all pairs$key=value$from the given string into a -table: -> - t = {} - s = "from=world, to=Lua" - for k, v in string.gmatch(s, "(%w+)=(%w+)") do - t[k] = v - end -> - -$string.gsub (s, pattern, repl [, n])$ *lrv-string.gsub* --------------------------------------- -Returns a copy of$s$in which all occurrences of the$pattern$have been replaced -by a replacement string specified by$repl$, which may be a string, a table, or -a function.$gsub$also returns, as its second value, the total number of -substitutions made. - -If$repl$is a string, then its value is used for replacement. The character$%$ -works as an escape character: any sequence in$repl$of the form$%n$, with@n@ -between 1 and 9, stands for the value of the@n@-th captured substring (see -below). The sequence$%0$stands for the whole match. The sequence$%%$stands for -a single$%$. - -If$repl$is a table, then the table is queried for every match, using the first -capture as the key; if the pattern specifies no captures, then the whole match -is used as the key. - -If$repl$is a function, then this function is called every time a match occurs, -with all captured substrings passed as arguments, in order; if the pattern -specifies no captures, then the whole match is passed as a sole argument. - -If the value returned by the table query or by the function call is a string -or a number, then it is used as the replacement string; otherwise, if it is -#false#or#nil#, then there is no replacement (that is, the original match is -kept in the string). - -The optional last parameter$n$limits the maximum number of substitutions to -occur. For instance, when$n$is 1 only the first occurrence of$pattern$is -replaced. - -Here are some examples: -> - x = string.gsub("hello world", "(%w+)", "%1 %1") - --> x="hello hello world world" - - x = string.gsub("hello world", "%w+", "%0 %0", 1) - --> x="hello hello world" - - x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1") - --> x="world hello Lua from" - - x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv) - --> x="home = /home/roberto, user = roberto" - - x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s) - return loadstring(s)() - end) - --> x="4+5 = 9" - - local t = {name="lua", version="5.1"} - x = string.gsub("$name%-$version.tar.gz", "%$(%w+)", t) - --> x="lua-5.1.tar.gz" -> - -$string.len (s)$ *lrv-string.len* ----------------- -Receives a string and returns its length. The empty string$""$has length 0. -Embedded zeros are counted, so$"a\000b\000c"$has length 5. - - -$string.lower (s)$ *lrv-string.lower* ------------------- -Receives a string and returns a copy of this string with all uppercase letters -changed to lowercase. All other characters are left unchanged. The definition -of what an uppercase letter is depends on the current locale. - - -$string.match (s, pattern [, init])$ *lrv-string.match* ------------------------------------- -Looks for the first@match@of$pattern$in the string$s$. If it finds one, then -$match$returns the captures from the pattern; otherwise it returns#nil#. -If$pattern$specifies no captures, then the whole match is returned. A third, -optional numerical argument$init$specifies where to start the search; its -default value is 1 and may be negative. - - -$string.rep (s, n)$ *lrv-string.rep* -------------------- -Returns a string that is the concatenation of$n$copies of the string$s$. - - -$string.reverse (s)$ *lrv-string.reverse* --------------------- -Returns a string that is the string$s$reversed. - - -$string.sub (s, i [, j])$ *lrv-string.sub* -------------------------- -Returns the substring of$s$that starts at$i$and continues until$j$;$i$and$j$ -may be negative. If$j$is absent, then it is assumed to be equal to@-1@(which -is the same as the string length). In particular, the call$string.sub(s,1,j)$ -returns a prefix of$s$with length$j$, and$string.sub(s,-i)$returns a suffix -of$s$with length$i$. - - -$string.upper (s)$ *lrv-string.upper* ------------------- -Receives a string and returns a copy of that string with all lowercase letters -changed to uppercase. All other characters are left unchanged. The definition -of what a lowercase letter is depends on the current locale. - - ------------------------------------------------------------------------------- -5.4.1 Patterns *lrv-patterns* *lrv-libStringPat* - - -A@character class@is used to represent a set of characters. The following -combinations are allowed in describing a character class: - - #o#@x@: (where@x@is not one of@the magic characters@ ^$()%.[]*+-? ) - represents the character@x@itself. - #o#$.$: (a dot) represents all characters. - #o#$%a$: represents all letters. - #o#$%c$: represents all control characters. - #o#$%d$: represents all digits. - #o#$%l$: represents all lowercase letters. - #o#$%p$: represents all punctuation characters. - #o#$%s$: represents all space characters. - #o#$%u$: represents all uppercase letters. - #o#$%w$: represents all alphanumeric characters. - #o#$%x$: represents all hexadecimal digits. - #o#$%z$: represents the character with representation 0. - #o#$%x$(where@x@is any non-alphanumeric character) represents the - character@x@. This is the standard way to escape the magic characters. - Any punctuation character (even the non-magic) can be preceded by a - $'%'$when used to represent itself in a pattern. - - #o#$[set]$: represents the class which is the union of all characters in - @set@. A range of characters may be specified by separating the end - characters of the range with a$'-'$. All classes$%x$described above may - also be used as components in@set@. All other characters in@set@ - represent themselves. For example,$[%w_]$(or$[_%w]$) represents all - alphanumeric characters plus the underscore,$[0-7]$represents the octal - digits, and$[0-7%l%-]$represents the octal digits plus the lowercase - letters plus the$'-'$character. - - The interaction between ranges and classes is not defined. Therefore, - patterns like$[%a-z]$or$[a-%%]$have no meaning. - - #o#$[^set]$: represents the complement of@set@, where@set@is interpreted - as above. - -For all classes represented by single letters ($%a$,$%c$, etc.), the -corresponding uppercase letter represents the complement of the class. For -instance,$%S$represents all non-space characters. - -The definitions of letter, space, and other character groups depend on the -current locale. In particular, the class$[a-z]$may not be equivalent to$%l$. - - *lrv-patternitem* -Pattern Item:~ -------------- -A@pattern item@may be - - #o# a single character class, which matches any single character in the - class; - #o# a single character class followed by$'*'$, which matches 0 or more - repetitions of characters in the class. These repetition items will - always match the longest possible sequence; - #o# a single character class followed by$'+'$, which matches 1 or more - repetitions of characters in the class. These repetition items will - always match the longest possible sequence; - #o# a single character class followed by$'-'$, which also matches 0 or - more repetitions of characters in the class. Unlike$'*'$, these - repetition items will always match the@shortest@possible sequence; - #o# a single character class followed by$'?'$, which matches 0 or 1 - occurrences of a character in the class; - #o#$%n$, for@n@between 1 and 9; such item matches a substring equal to the - @n@-th captured string (see below); - #o#$%bxy$, where@x@and@y@are two distinct characters; such item matches - strings that start with@x@, end with@y@, and where the@x@and@y@ - are@balanced@. This means that, if one reads the string from left to - right, counting@+1@for an@x@and@-1@for a@y@, the ending@y@is the first - @y@where the count reaches 0. For instance, the item$%b()$matches - expressions with balanced parentheses. - - *lrv-pattern* -Pattern:~ --------- -A@pattern@is a sequence of pattern items. A$'^'$at the beginning of a pattern -anchors the match at the beginning of the subject string. A '$' at the end of -a pattern anchors the match at the end of the subject string. At other -positions,$'^'$and '$' have no special meaning and represent themselves. - - *lrv-capture* -Captures:~ ---------- -A pattern may contain sub-patterns enclosed in parentheses; they describe -@captures@. When a match succeeds, the substrings of the subject string that -match captures are stored (@captured@) for future use. Captures are numbered -according to their left parentheses. For instance, in the pattern -$"(a*(.)%w(%s*))"$, the part of the string matching$"a*(.)%w(%s*)"$is -stored as the first capture (and therefore has number 1); the character -matching$.$is captured with number 2, and the part matching$%s*$has number 3. - -As a special case, the empty capture$()$captures the current string position -(a number). For instance, if we apply the pattern$"()aa()"$on the -string$"flaaap"$, there will be two captures: 3 and 5. - -A pattern cannot contain embedded zeros. Use$%z$instead. - - -============================================================================== -5.5 Table Manipulation *lrv-libTable* - - -This library provides generic functions for table manipulation. It provides -all its functions inside the table$table$. - -Most functions in the table library assume that the table represents an array -or a list. For those functions, when we talk about the "length" of a table we -mean the result of the length operator. - - -$table.concat (table [, sep [, i [, j]]])$ *lrv-table.concat* ------------------------------------------- -Given an array where all elements are strings or numbers, returns -$table[i]..sep..table[i+1] ... sep..table[j]$. The default value for$sep$is -the empty string, the default for$i$is 1, and the default for$j$is the length -of the table. If$i$is greater than$j$, returns the empty string. - - -$table.foreach (table, f)$ *lrv-table.foreach* --------------------------- -Executes the given$f$over all elements of$table$. For each element,$f$is -called with the index and respective value as arguments. If$f$returns a -non-#nil#value, then the loop is broken, and this value is returned as the -final value of$table.foreach$. - -See |lrv-next| for extra information about table traversals. - - -$table.foreachi (table, f)$ *lrv-table.foreachi* ---------------------------- -Executes the given$f$over the numerical indices of$table$. For each -index,$f$is called with the index and respective value as arguments. Indices -are visited in sequential order, from 1 to$n$, where$n$is the length of the -table. If$f$returns a non-#nil#value, then the loop is broken and this value -is returned as the result of$table.foreachi$. - - -$table.insert (table, [pos,] value)$ *lrv-table.insert* ------------------------------------- -Inserts element$value$at position$pos$in$table$, shifting up other elements to -open space, if necessary. The default value for$pos$is$n+1$, where$n$is the -length of the table (see |lrv-langLength|), so that a call$table.insert(t,x)$ -inserts$x$at the end of table$t$. - - -$table.maxn (table)$ *lrv-table.maxn* --------------------- -Returns the largest positive numerical index of the given table, or zero if -the table has no positive numerical indices. (To do its job this function does -a linear traversal of the whole table.) - - -$table.remove (table [, pos])$ *lrv-table.remove* ------------------------------- -Removes from$table$the element at position$pos$, shifting down other elements -to close the space, if necessary. Returns the value of the removed element. -The default value for$pos$is$n$, where$n$is the length of the table (see -|lrv-langLength|), so that a call$table.remove(t)$removes the last element of -table$t$. - - -$table.sort (table [, comp])$ *lrv-table.sort* ------------------------------ -Sorts table elements in a given order,@in-place@, from$table[1]$to$table[n]$, -where$n$is the length of the table (see |lrv-langLength|). If$comp$is given, -then it must be a function that receives two table elements, and returns true -when the first is less than the second (so that$not comp(a[i+1],a[i])$will be -true after the sort). If$comp$is not given, then the standard Lua -operator$<$is used instead. - -The sort algorithm is@not@stable, that is, elements considered equal by the -given order may have their relative positions changed by the sort. - - -============================================================================== -5.6 Mathematical Functions *lrv-libMath* - - -This library is an interface to most of the functions of the standard C math -library. It provides all its functions inside the table$math$. - - -$math.abs (x)$ *lrv-math.abs* --------------- -Returns the absolute value of$x$. - - -$math.acos (x)$ *lrv-math.acos* ---------------- -Returns the arc cosine of$x$(in radians). - - -$math.asin (x)$ *lrv-math.asin* ---------------- -Returns the arc sine of$x$(in radians). - - -$math.atan (x)$ *lrv-math.atan* ---------------- -Returns the arc tangent of$x$(in radians). - - -$math.atan2 (x, y)$ *lrv-math.atan2* -------------------- -Returns the arc tangent of$x/y$(in radians), but uses the signs of both -parameters to find the quadrant of the result. (It also handles correctly the -case of$y$being zero.) - - -$math.ceil (x)$ *lrv-math.ceil* ---------------- -Returns the smallest integer larger than or equal to$x$. - - -$math.cos (x)$ *lrv-math.cos* --------------- -Returns the cosine of$x$(assumed to be in radians). - - -$math.cosh (x)$ *lrv-math.cosh* ---------------- -Returns the hyperbolic cosine of$x$. - - -$math.deg (x)$ *lrv-math.deg* --------------- -Returns the angle$x$(given in radians) in degrees. - - -$math.exp (x)$ *lrv-math.exp* --------------- -Returns the value$e^x$. - - -$math.floor (x)$ *lrv-math.floor* ----------------- -Returns the largest integer smaller than or equal to$x$. - - -$math.fmod (x, y)$ *lrv-math.fmod* ------------------- -Returns the remainder of the division of$x$by$y$. - - -$math.frexp (x)$ *lrv-math.frexp* ----------------- -Returns$m$and$e$such that$x = m * 2^e$,$e$is an integer and the absolute value -of$m$is in the range@[0.5, 1)@(or zero when$x$is zero). - - -$math.huge$ *lrv-math.huge* ------------ -The value$HUGE_VAL$, a value larger than or equal to any other numerical -value. - - -$math.ldexp (m, e)$ *lrv-math.ldexp* -------------------- -Returns$m * 2^e$($e$should be an integer). - - -$math.log (x)$ *lrv-math.log* --------------- -Returns the natural logarithm of$x$. - - -$math.log10 (x)$ *lrv-math.log10* ----------------- -Returns the base-10 logarithm of$x$. - - -$math.max (x, ...)$ *lrv-math.max* -------------------- -Returns the maximum value among its arguments. - - -$math.min (x, ...)$ *lrv-math.min* -------------------- -Returns the minimum value among its arguments. - - -$math.modf (x)$ *lrv-math.modf* ---------------- -Returns two numbers, the integral part of$x$and the fractional part of$x$. - - -$math.pi$ *lrv-math.pi* ---------- -The value of@pi@. - - -$math.pow (x, y)$ *lrv-math.pow* ------------------ -Returns$x^y$. (You can also use the expression$x^y$to compute this value.) - - -$math.rad (x)$ *lrv-math.rad* --------------- -Returns the angle$x$(given in degrees) in radians. - - -$math.random ([m [, n]])$ *lrv-math.random* -------------------------- -This function is an interface to the simple pseudo-random generator function -$rand$provided by ANSI C. (No guarantees can be given for its statistical -properties.) - -When called without arguments, returns a pseudo-random real number in the -range@[0,1)@. When called with a number$m$,$math.random$returns a -pseudo-random integer in the range@[1, m]@. When called with two numbers$m$ -and$n$,$math.random$returns a pseudo-random integer in the range@[m, n]@. - - -$math.randomseed (x)$ *lrv-math.randomseed* ---------------------- -Sets$x$as the "seed" for the pseudo-random generator: equal seeds produce -equal sequences of numbers. - - -$math.sin (x)$ *lrv-math.sin* --------------- -Returns the sine of$x$(assumed to be in radians). - - -$math.sinh (x)$ *lrv-math.sinh* ---------------- -Returns the hyperbolic sine of$x$. - - -$math.sqrt (x)$ *lrv-math.sqrt* ---------------- -Returns the square root of$x$. (You can also use the expression$x^0.5$to -compute this value.) - - -$math.tan (x)$ *lrv-math.tan* --------------- -Returns the tangent of$x$(assumed to be in radians). - - -$math.tanh (x)$ *lrv-math.tanh* ---------------- -Returns the hyperbolic tangent of$x$. - - -============================================================================== -5.6 Input and Output Facilities *lrv-libIO* - - -The I/O library provides two different styles for file manipulation. The first -one uses implicit file descriptors; that is, there are operations to set a -default input file and a default output file, and all input/output operations -are over these default files. The second style uses explicit file -descriptors. - -When using implicit file descriptors, all operations are supplied by -table$io$. When using explicit file descriptors, the operation$io.open$returns -a file descriptor and then all operations are supplied as methods of the file -descriptor. - -The table$io$also provides three predefined file descriptors with their usual -meanings from C:$io.stdin$,$io.stdout$, and$io.stderr$. - -Unless otherwise stated, all I/O functions return#nil#on failure (plus an -error message as a second result) and some value different from#nil#on -success. - - -$io.close ([file])$ *lrv-io.close* -------------------- -Equivalent to$file:close$. Without a$file$, closes the default output file. - - -$io.flush ()$ *lrv-io.flush* -------------- -Equivalent to$file:flush$over the default output file. - - -$io.input ([file])$ *lrv-io.input* -------------------- -When called with a file name, it opens the named file (in text mode), and sets -its handle as the default input file. When called with a file handle, it -simply sets this file handle as the default input file. When called without -parameters, it returns the current default input file. - -In case of errors this function raises the error, instead of returning an -error code. - - -$io.lines ([filename])$ *lrv-io.lines* ------------------------ -Opens the given file name in read mode and returns an iterator function that, -each time it is called, returns a new line from the file. Therefore, the -construction - - $for line in io.lines(filename) do$@body@$end$ - -will iterate over all lines of the file. When the iterator function detects -the end of file, it returns#nil#(to finish the loop) and automatically closes -the file. - -The call$io.lines()$(without a file name) is equivalent to -$io.input():lines()$; that is, it iterates over the lines of the default input -file. In this case it does not close the file when the loop ends. - - -$io.open (filename [, mode])$ *lrv-io.open* ------------------------------ -This function opens a file, in the mode specified in the string$mode$. It -returns a new file handle, or, in case of errors,#nil#plus an error message. - -The$mode$string can be any of the following: - - #o#@"r"@: read mode (the default); - #o#@"w"@: write mode; - #o#@"a"@: append mode; - #o#@"r+"@: update mode, all previous data is preserved; - #o#@"w+"@: update mode, all previous data is erased; - #o#@"a+"@: append update mode, previous data is preserved, writing is only - allowed at the end of file. - -The$mode$string may also have a$'b'$at the end, which is needed in some -systems to open the file in binary mode. This string is exactly what is used -in the standard C function$fopen$. - - -$io.output ([file])$ *lrv-io.output* --------------------- -Similar to$io.input$, but operates over the default output file. - - -$io.popen (prog [, mode])$ *lrv-io.popen* --------------------------- -Starts program$prog$in a separated process and returns a file handle that you -can use to read data from this program (if$mode$is$"r"$, the default) or to -write data to this program (if$mode$is$"w"$). - -This function is system dependent and is not available on all platforms. - - -$io.read (...)$ *lrv-io.read* ---------------- -Equivalent to$io.input():read$. - - -$io.tmpfile ()$ *lrv-io.tmpfile* ---------------- -Returns a handle for a temporary file. This file is opened in update mode and -it is automatically removed when the program ends. - - -$io.type (obj)$ *lrv-io.type* ---------------- -Checks whether$obj$is a valid file handle. Returns the string$"file"$if$obj$is -an open file handle,$"closed file"$if$obj$is a closed file handle, or#nil#if -$obj$is not a file handle. - - -$io.write (...)$ *lrv-io.write* ----------------- -Equivalent to$io.output():write$. - - -$file:close ()$ *lrv-file:close* ---------------- -Closes$file$. Note that files are automatically closed when their handles are -garbage collected, but that takes an unpredictable amount of time to happen. - - -$file:flush ()$ *lrv-file:flush* ---------------- -Saves any written data to$file$. - - -$file:lines ()$ *lrv-file:lines* ---------------- -Returns an iterator function that, each time it is called, returns a new line -from the file. Therefore, the construction - - $for line in file:lines() do$@body@$end$ - -will iterate over all lines of the file. (Unlike$io.lines$, this function does -not close the file when the loop ends.) - - -$file:read (...)$ *lrv-file:read* ------------------ -Reads the file$file$, according to the given formats, which specify what to -read. For each format, the function returns a string (or a number) with the -characters read, or#nil#if it cannot read data with the specified format. When -called without formats, it uses a default format that reads the entire next -line (see below). - -The available formats are - - #o##"*n"#: reads a number; this is the only format that returns a number - instead of a string. - #o##"*a"#: reads the whole file, starting at the current position. On end of - file, it returns the empty string. - #o##"*l"#: reads the next line (skipping the end of line), returning#nil#on - end of file. This is the default format. - #o#@number@: reads a string with up to that number of characters, returning - #nil#on end of file. If number is zero, it reads nothing and returns an - empty string, or#nil#on end of file. - - -$file:seek ([whence] [, offset])$ *lrv-file:seek* ---------------------------------- -Sets and gets the file position, measured from the beginning of the file, to -the position given by$offset$plus a base specified by the string$whence$, as -follows: - - #o##"set"#: base is position 0 (beginning of the file); - #o##"cur"#: base is current position; - #o##"end"#: base is end of file; - -In case of success, function$seek$returns the final file position, measured in -bytes from the beginning of the file. If this function fails, it returns#nil#, -plus a string describing the error. - -The default value for$whence$is$"cur"$, and for$offset$is 0. Therefore, the -call$file:seek()$returns the current file position, without changing it; the -call$file:seek("set")$sets the position to the beginning of the file (and -returns 0); and the call$file:seek("end")$sets the position to the end of the -file, and returns its size. - - -$file:setvbuf (mode [, size])$ *lrv-file:setvbuf* ------------------------------- -Sets the buffering mode for an output file. There are three available modes: - - #o##"no"#: no buffering; the result of any output operation appears - immediately. - #o##"full"#: full buffering; output operation is performed only when the - buffer is full (or when you explicitly$flush$the file (see - |lrv-io.flush|). - #o##"line"#: line buffering; output is buffered until a newline is output or - there is any input from some special files (such as a terminal device). - -For the last two cases,$size$specifies the size of the buffer, in bytes. -The default is an appropriate size. - - -$file:write (...)$ *lrv-file:write* ------------------- -Writes the value of each of its arguments to$file$. The arguments must be -strings or numbers. To write other values, use$tostring$|lrv-tostring| or -$string.format$|lrv-string.format| before$write$. - - -============================================================================== -5.8 Operating System Facilities *lrv-libOS* - - -This library is implemented through table$os$. - - -$os.clock ()$ *lrv-os.clock* -------------- -Returns an approximation of the amount in seconds of CPU time used by the -program. - - -$os.date ([format [, time]])$ *lrv-os.date* ------------------------------ -Returns a string or a table containing date and time, formatted according to -the given string$format$. - -If the$time$argument is present, this is the time to be formatted (see the -$os.time$function |lrv-os.time| for a description of this value). Otherwise, -$date$formats the current time. - -If$format$starts with$'!'$,then the date is formatted in Coordinated Universal -Time. After this optional character, if$format$is the string$"*t"$, then$date$ -returns a table with the following fields:$year$(four digits),$month$(1-12), -$day$(1-31),$hour$(0-23),$min$(0-59),$sec$(0-61),$wday$(weekday, Sunday is 1), -$yday$(day of the year), and$isdst$(daylight saving flag, a boolean). - -If$format$is not$"*t"$, then$date$returns the date as a string, formatted -according to the same rules as the C function$strftime$. - -When called without arguments,$date$returns a reasonable date and time -representation that depends on the host system and on the current locale (that -is,$os.date()$is equivalent to$os.date("%c")$). - - -$os.difftime (t2, t1)$ *lrv-os.difftime* ----------------------- -Returns the number of seconds from time$t1$to time$t2$. In POSIX, Windows, and -some other systems, this value is exactly$t2 - t1$. - - -$os.execute ([command])$ *lrv-os.execute* ----------------------- -This function is equivalent to the C function$system$. It passes$command$to be -executed by an operating system shell. It returns a status code, which is -system-dependent. If$command$is absent, then it returns nonzero if a shell is -available and zero otherwise. - - -$os.exit ([code])$ *lrv-os.exit* ------------------- -Calls the C function$exit$, with an optional$code$, to terminate the host -program. The default value for$code$is the success code. - - -$os.getenv (varname)$ *lrv-os.getenv* ---------------------- -Returns the value of the process environment variable$varname$, or#nil#if the -variable is not defined. - - -$os.remove (filename)$ *lrv-os.remove* ----------------------- -Deletes the file with the given name. Directories must be empty to be removed. -If this function fails, it returns#nil#, plus a string describing the error. - - -$os.rename (oldname, newname)$ *lrv-os.rename* ------------------------------- -Renames file named$oldname$to$newname$. If this function fails, it returns -#nil#, plus a string describing the error. - - -$os.setlocale (locale [, category])$ *lrv-os.setlocale* ------------------------------------- -Sets the current locale of the program.$locale$is a string specifying a -locale;$category$is an optional string describing which category to change: -$"all"$,$"collate"$,$"ctype"$,$"monetary"$,$"numeric"$, or$"time"$; the -default category is$"all"$. The function returns the name of the new locale, -or#nil#if the request cannot be honored. - - -$os.time ([table])$ *lrv-os.time* -------------------- -Returns the current time when called without arguments, or a time representing -the date and time specified by the given table. This table must have fields -$year$,$month$, and$day$, and may have fields$hour$,$min$,$sec$, and$isdst$ -(for a description of these fields, see the$os.date$function |lrv-os.date|). - -The returned value is a number, whose meaning depends on your system. In -POSIX, Windows, and some other systems, this number counts the number of -seconds since some given start time (the "epoch"). In other systems, the -meaning is not specified, and the number returned by$time$can be used only as -an argument to$date$and$difftime$. - - -$os.tmpname ()$ *lrv-os.tmpname* ---------------- -Returns a string with a file name that can be used for a temporary file. The -file must be explicitly opened before its use and explicitly removed when no -longer needed. - - -============================================================================== -5.9 The Debug Library *lrv-libDebug* - - -This library provides the functionality of the debug interface to Lua -programs. You should exert care when using this library. The functions -provided here should be used exclusively for debugging and similar tasks, such -as profiling. Please resist the temptation to use them as a usual programming -tool: they can be very slow. Moreover, several of its functions violate some -assumptions about Lua code (e.g., that variables local to a function cannot be -accessed from outside or that userdata metatables cannot be changed by Lua -code) and therefore can compromise otherwise secure code. - -All functions in this library are provided inside the$debug$table. All -functions that operate over a thread have an optional first argument which is -the thread to operate over. The default is always the current thread. - - -$debug.debug ()$ *lrv-debug.debug* ----------------- -Enters an interactive mode with the user, running each string that the user -enters. Using simple commands and other debug facilities, the user can inspect -global and local variables, change their values, evaluate expressions, and so -on. A line containing only the word$cont$finishes this function, so that the -caller continues its execution. - -Note that commands for$debug.debug$are not lexically nested within any -function, and so have no direct access to local variables. - - -$debug.getfenv (o)$ *lrv-debug.getfenv* -------------------- -Returns the environment of object$o$. - - -$debug.gethook ([thread])$ *lrv-debug.gethook* --------------------------- -Returns the current hook settings of the thread, as three values: the current -hook function, the current hook mask, and the current hook count (as set by -the$debug.sethook$function). - - -$debug.getinfo ([thread,] function [, what])$ *lrv-debug.getinfo* ---------------------------------------------- -Returns a table with information about a function. You can give the function -directly, or you can give a number as the value of$function$, which means the -function running at level$function$of the call stack of the given thread: -level 0 is the current function ($getinfo$itself); level 1 is the function -that called$getinfo$; and so on. If$function$is a number larger than the -number of active functions, then$getinfo$returns#nil#. - -The returned table may contain all the fields returned by$lua_getinfo$(see -|lrv-lua_getinfo|), with the string$what$describing which fields to fill in. -The default for$what$is to get all information available, except the table of -valid lines. If present, the option$'f'$adds a field named$func$with the -function itself. If present, the option$'L'$adds a field named$activelines$ -with the table of valid lines. - -For instance, the expression$debug.getinfo(1,"n").name$returns the name of the -current function, if a reasonable name can be found, and$debug.getinfo(print)$ -returns a table with all available information about the$print$function. - - -$debug.getlocal ([thread,] level, local)$ *lrv-debug.getlocal* ------------------------------------------ -This function returns the name and the value of the local variable with index -$local$of the function at level$level$of the stack. (The first parameter or -local variable has index 1, and so on, until the last active local variable.) -The function returns#nil#if there is no local variable with the given index, -and raises an error when called with a$level$out of range. (You can call -$debug.getinfo$|lrv-debug.getinfo| to check whether the level is valid.) - -Variable names starting with$'('$(open parentheses) represent internal -variables (loop control variables, temporaries, and C function locals). - - -$debug.getmetatable (object)$ *lrv-debug.getmetatable* ------------------------------ -Returns the metatable of the given$object$or#nil#if it does not have a -metatable. - - -$debug.getregistry ()$ *lrv-debug.getregistry* ----------------------- -Returns the registry table (see |lrv-apiRegistry|). - - -$debug.getupvalue (func, up)$ *lrv-debug.getupvalue* ------------------------------ -This function returns the name and the value of the upvalue with index$up$of -the function$func$. The function returns#nil#if there is no upvalue with the -given index. - - -$debug.setfenv (object, table)$ *lrv-debug.setfenv* -------------------------------- -Sets the environment of the given$object$to the given$table$. Returns$object$. - - -$debug.sethook ([thread,] hook, mask [, count])$ *lrv-debug.sethook* ------------------------------------------------- -Sets the given function as a hook. The string$mask$and the number$count$ -describe when the hook will be called. The string mask may have the following -characters, with the given meaning: - - #o#@"c"@: The hook is called every time Lua calls a function; - #o#@"r"@: The hook is called every time Lua returns from a function; - #o#@"l"@: The hook is called every time Lua enters a new line of code. - -With a$count$different from zero, the hook is called after every$count$ -instructions. - -When called without arguments, the$debug.sethook$turns off the hook. - -When the hook is called, its first parameter is a string describing the -event that triggered its call:$"call"$,$"return"$(or$"tail return"$),$"line"$, -and$"count"$. For line events, the hook also gets the new line number as its -second parameter. Inside a hook, you can call$getinfo$with level 2 to get -more information about the running function (level 0 is the$getinfo$function, -and level 1 is the hook function), unless the event is$"tail return"$. In this -case, Lua is only simulating the return, and a call to$getinfo$will return -invalid data. - - -$debug.setlocal ([thread,] level, local, value)$ *lrv-debug.setlocal* ------------------------------------------------- -This function assigns the value$value$to the local variable with index$local$ -of the function at level$level$of the stack. The function returns#nil#if there -is no local variable with the given index, and raises an error when called -with a$level$out of range. (You can call$getinfo$to check whether the level is -valid.) Otherwise, it returns the name of the local variable. - - -$debug.setmetatable (object, table)$ *lrv-debug.setmetatable* ------------------------------------- -Sets the metatable for the given$object$to the given$table$(which can be -#nil#). - - -$debug.setupvalue (func, up, value)$ *lrv-debug.setupvalue* ------------------------------------- -This function assigns the value$value$to the upvalue with index$up$of the -function$func$. The function returns#nil#if there is no upvalue with the given -index. Otherwise, it returns the name of the upvalue. - - -$debug.traceback ([thread,] [message] [,level])$ *lrv-debug.traceback* ------------------------------------------------- -Returns a string with a traceback of the call stack. An optional$message$ -string is appended at the beginning of the traceback. An optional$level$number -tells at which level to start the traceback (default is 1, the function -calling$traceback$). - - -============================================================================== -6 LUA STAND-ALONE *lrv-lua* *lrv-LuaSA* -============================================================================== - - -Although Lua has been designed as an extension language, to be embedded in a -host C program, it is also frequently used as a stand-alone language. An -interpreter for Lua as a stand-alone language, called simply$lua$, is provided -with the standard distribution. The stand-alone interpreter includes all -standard libraries, including the debug library. Its usage is: -> - lua [options] [script [args]] -> -The options are: - - #o#$-e$@stat@: executes string@stat@; - #o#$-l$@mod@: "requires"@mod@; - #o#$-i$: enters interactive mode after running@script@; - #o#$-v$: prints version information; - #o#$--$: stops handling options; - #o#$-$: executes$stdin$as a file and stops handling options. - -After handling its options,$lua$runs the given@script@, passing to it the -given@args@as string arguments. When called without arguments,$lua$behaves -as$lua -v -i$when the standard input ($stdin$) is a terminal, and as -$lua -$otherwise. - -Before running any argument, the interpreter checks for an environment -variable$LUA_INIT$. If its format is$@filename$, then$lua$executes the file. -Otherwise,$lua$executes the string itself. - -All options are handled in order, except$-i$. For instance, an invocation -like -> - $ lua -e'a=1' -e 'print(a)' script.lua -> -will first set$a$to 1, then print the value of$a$(which is$'1'$), and finally -run the file$script.lua$with no arguments. (Here, '$' is the shell prompt. -Your prompt may be different.) - -Before starting to run the script,$lua$collects all arguments in the command -line in a global table called$arg$. The script name is stored in index 0, the -first argument after the script name goes to index 1, and so on. Any arguments -before the script name (that is, the interpreter name plus the options) go to -negative indices. For instance, in the call -> - $ lua -la b.lua t1 t2 -> -the interpreter first runs the file$a.lua$, then creates a table -> - arg = { [-2] = "lua", [-1] = "-la", - [0] = "b.lua", - [1] = "t1", [2] = "t2" } -> -and finally runs the file$b.lua$. The script is called with$arg[1]$,$arg[2]$, -... as arguments; it can also access these arguments with the vararg expression -$'...'$. - -In interactive mode, if you write an incomplete statement, the interpreter -waits for its completion by issuing a different prompt. - -If the global variable$_PROMPT$contains a string, then its value is used as -the prompt. Similarly, if the global variable$_PROMPT2$contains a string, its -value is used as the secondary prompt (issued during incomplete statements). -Therefore, both prompts can be changed directly on the command line. For -instance, -> - $ lua -e"_PROMPT='myprompt> '" -i -> -(the outer pair of quotes is for the shell, the inner pair is for Lua), or in -any Lua programs by assigning to$_PROMPT$. Note the use of$-i$to enter -interactive mode; otherwise, the program would just end silently right after -the assignment to$_PROMPT$. - -To allow the use of Lua as a script interpreter in Unix systems, the -stand-alone interpreter skips the first line of a chunk if it starts with$#$. -Therefore, Lua scripts can be made into executable programs by using$chmod +x$ -and the$#!$form, as in -> - #!/usr/local/bin/lua -> -(Of course, the location of the Lua interpreter may be different in your -machine. If$lua$is in your$PATH$, then -> - #!/usr/bin/env lua -> -is a more portable solution.) - - -============================================================================== -A BIBLIOGRAPHY *lrv-bibliography* -============================================================================== - -This help file is a minor adaptation from this main reference: - - #o# R. Ierusalimschy, L. H. de Figueiredo, and W. Celes., - "Lua: 5.1 reference manual",$http://www.lua.org/manual/5.1/manual.html$ - -Lua is discussed in these references: - - #o#R. Ierusalimschy, L. H. de Figueiredo, and W. Celes., - "Lua --- an extensible extension language". - @Software: Practice & Experience@#26##6 (1996) 635-652. - - #o#L. H. de Figueiredo, R. Ierusalimschy, and W. Celes., - "The design and implementation of a language for extending applications". - @Proc. of XXI Brazilian Seminar on Software and Hardware@(1994) 273-283. - - #o#L. H. de Figueiredo, R. Ierusalimschy, and W. Celes., - "Lua: an extensible embedded language". - @Dr. Dobb's Journal@#21##12 (Dec 1996) 26-33. - - #o#R. Ierusalimschy, L. H. de Figueiredo, and W. Celes., - "The evolution of an extension language: a history of Lua". - @Proc. of V Brazilian Symposium on Programming Languages@(2001) B-14-B-28. - - -============================================================================== -B COPYRIGHT & LICENSES *lrv-copyright* -============================================================================== - - -This help file has the same copyright and license as Lua 5.1 and the Lua 5.1 - manual: - -Copyright (c) 1994-2006 Lua.org, PUC-Rio. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -============================================================================== -C LUAREFVIM DOC *luarefvim* *luarefvimdoc* *lrv-help* *lrv-doc* -============================================================================== - - -This is a Vim help file containing a reference for Lua 5.1, and it is -- with -a few exceptions and adaptations -- a copy of the Lua 5.1 Reference Manual -(see |lrv-bibliography|). For usage information, refer to |lrv-docUsage|; for -instalation, refer to |lrv-docInstall|. - -This manual is composed of three parts: this file,$luarefvim.txt$, that is, -the manual itself; a plugin file, $luarefvim.vim$, defining key bindings; and -a help file syntax extension, $help.vim$. See |lrv-docInstall| for more -information on these files. For copyright information, see |lrv-copyright|. - -The main ideas and concepts on how to implement this reference were taken from -Christian Habermann's CRefVim project -($http://www.vim.org/scripts/script.php?script_id=614$). - - -============================================================================== -C.1 Installation *lrv-docInstall* - - -This reference consists of three files: the manual itself,$luarefvim.txt$, -a plugin file,$luarefvim.vim$, to load key bindings, and a help file syntax -extension$help.vim$. To install luarefvim, copy these files to their -respective locations: - - +-----------------+----------------+ - |# file #|# location #| - + ----------------+----------------+ - |$ luarefvim.txt $|$ doc $| - |$ luarefvim.vim $|$ plugin $| - |$ help.vim $|$ after/syntax $| - +-----------------+----------------+ - -where #location# is relative to 'runtimepath', that is, $HOME/.vim for a local -Un*x install or $HOME/vimfiles for a local Win32 install, for example. -Finally, to generate the tags, change dir to$doc$above (where you installed -$luarefvim.txt$), start Vim, and issue$:helptags .$For more information on -installing help files, call$:help add-local-help$. - - -============================================================================== -C.2 Usage *lrv-docUsage* - - -The usage is really simple, and similar to CRefVim: - - +----------+--------------+----------------------------------------+ - |# edit #|# key #| | - |# mode #|# sequence #|# action #| - +----------+--------------+----------------------------------------+ - |@ normal @| <Leader>lr | reference for word under cursor | - |@ visual @| <Leader>lr | reference for visually selected text | - |$ any $| <Leader>lc | manual's table of contents | - +----------+--------------+----------------------------------------+ - -Since by default <Leader> is mapped to$'\'$, just pressing$\lc$would bring the -table of contents, for example.$lr$stands for@(l)ua (r)eference@, while$lc$ -stands for@(l)ua (c)ontents@. - - ------------------------------------------------------------------------------- - vi:tw=78:ts=4:ft=help:norl:noai - diff --git a/files/.vim/doc/rails.txt b/files/.vim/doc/rails.txt deleted file mode 100644 index 2390100..0000000 --- a/files/.vim/doc/rails.txt +++ /dev/null @@ -1,1131 +0,0 @@ -*rails.txt* Plugin for working with Ruby on Rails applications - -Author: Tim Pope <vimNOSPAM@tpope.info> |rails-plugin-author| - -|rails-introduction| Introduction and Feature Summary -|rails-installation| Installation and Usage -|rails-install-vim| Installing and Configuring Vim -|rails-install-plugin| Installing and Using the Plugin -|rails-commands| General Commands -|rails-navigation| Navigation -|rails-gf| File Under Cursor - gf -|rails-alternate-related| Alternate and Related Files -|rails-model-navigation| Model Navigation Commands -|rails-controller-navigation| Controller Navigation Commands -|rails-misc-navigation| Miscellaneous Navigation Commands -|rails-custom-navigation| Custom Navigation Commands -|rails-scripts| Script Wrappers -|rails-refactoring| Refactoring Helpers -|rails-partials| Partial Extraction -|rails-migrations| Migration Inversion -|rails-integration| Integration -|rails-vim-integration| Integration with the Vim Universe -|rails-rails-integration| Integration with the Rails Universe -|rails-abbreviations| Abbreviations -|rails-syntax| Syntax Highlighting -|rails-options| Managed Vim Options -|rails-configuration| Configuration -|rails-global-settings| Global Settings -|rails-about| About rails.vim -|rails-license| License - -This plugin is only available if 'compatible' is not set. - -{Vi does not have any of this} - -============================================================================== -INTRODUCTION *rails-introduction* *rails* - -TextMate may be the latest craze for developing Ruby on Rails applications, -but Vim is forever. This plugin offers the following features for Ruby on -Rails application development. - -1. Automatically detects buffers containing files from Rails applications, - and applies settings to those buffers (and only those buffers). You can - use an autocommand to apply your own custom settings as well. - |rails-configuration| - -2. Unintrusive. Only files in a Rails application should be affected; regular - Ruby scripts are left untouched. Even when enabled, the plugin should keep - out of your way if you're not using its features. (If you find a situation - where this is not a case, contact the |rails-plugin-author|.) - -3. Provides reasonable settings for working with Rails applications. Rake is - the 'makeprg' (and it always knows where your Rakefile is), 'shiftwidth' - is 2, and 'path' includes an appropriate collection of directories from - your application. |rails-options| - -4. Easy navigation of the Rails directory structure. |gf| considers context - and knows about partials, fixtures, and much more. There are two commands, - :A (alternate) and :R (related) for easy jumping between files, including - favorites like model to migration, template to helper, and controller to - functional test. For more advanced usage, :Rmodel, :Rview, :Rcontroller, - and several other commands are provided. |rails-navigation| - -5. Enhanced syntax highlighting. From has_and_belongs_to_many to - distance_of_time_in_words, it's here. For Vim 7 users, 'completefunc' is - set to enable syntax based completion on |i_CTRL-X_CTRL-U|, making it easy - to complete such long method names. |rails-syntax| - -6. Interface to script/*. Generally, use ":Rscript about" to call - "script/about". Most commands have wrappers with additional features: - ":Rgenerate controller Blog" generates a blog controller and edits - app/controllers/blog_controller.rb. |rails-scripts| - -7. Partial extraction and migration inversion. |:Rextract| {file} replaces - the desired range (ideally selected in visual line mode) with "render - :partial => '{file}'", which is automatically created with your content. - The @{file} instance variable is replaced with the {file} local variable. - |:Rinvert| takes a self.up migration and writes a self.down. - |rails-refactoring| - -8. Integration with other plugins. |:Rproject| creates a new project.vim - project. |:Rdbext| loads database settings from database.yml for dbext.vim - (and this happens by default under most circumstances). Cream users get - some additional mappings, and all GUI users get a menu. |rails-integration| - -============================================================================== -INSTALLATION AND USAGE *rails-installation* - -If you are familiar Vim and have the latest version installed, you may skip -directly to |rails-install-plugin| below. - -Installing and Configuring Vim ~ - *rails-install-vim* -Because it is common for users to utilize an older version of Vim that came -installed on a system, rails.vim has a design goal of remaining compatible -with versions of Vim 6.2 and newer. However, if you have a choice in the -matter, you are strongly encouraged to install the latest version available. -Older versions of Vim should work, but increasingly, new plugin features will -require Vim 7 or newer. If possible, install a version of Vim with the |Ruby| -interface compiled in, as a few features will make use of it when available. - -If you are new to Vim, you need to create a vimrc. For Windows, this file -goes in ~\_vimrc (try :e ~\_vimrc if you don't know where this is). On other -platforms, use ~/.vimrc. A very minimal example file is shown below. -> - set nocompatible - syntax on - filetype plugin indent on -> -Installing and Using the Plugin ~ - *rails-install-plugin* -If you have the zip file, extract it to vimfiles (Windows) or ~/.vim -(everything else). You should have the following files: > - plugin/rails.vim - doc/rails.txt -See |add-local-help| for instructions on enabling the documentation. In a -nutshell: > - :helptags ~/.vim/doc - -Whenever you edit a file in a Rails application, this plugin will be -automatically activated. This sets various options and defines a few -buffer-specific commands. - -If you are in a hurry to get started, with a minimal amount of reading, you -are encouraged to at least skim through the headings and command names in this -file, to get a better idea of what is offered. If you only read one thing, -make sure it is the navigation section: |rails-navigation|. - -============================================================================== -GENERAL COMMANDS *rails-commands* - -All commands are buffer local, unless otherwise stated. This means you must -actually edit a file from a Rails application. - - *rails-:Rails* -:Rails {directory} The only global command. Creates a new Rails - application in {directory}, and loads the README. - - *rails-:Rake* -:Rake {targets} Like calling |:make| {targets} (with 'makeprg' being - rake). However, in some contexts, if {targets} are - omitted, :Rake defaults to something sensible (like - db:migrate in a migration, or your current test). - - *rails-:Rake!* -:Rake! {targets} Called with a bang, :Rake will use an alternate - 'errorformat' which attempts to parse the full stack - backtrace. - - *rails-:Rcd* -:Rcd [{directory}] |:cd| to /path/to/railsapp/{directory}. - - *rails-:Rlcd* -:Rlcd [{directory}] |:lcd| to /path/to/railsapp/{directory}. - - *rails-:Rdoc* -:Rdoc Browse to the Rails API, either in doc/api in the - current Rails application, gem_server if it is - running, or http://api.rubyonrails.org/ . Requires - :OpenURL to be defined (see |rails-:OpenURL|). - - *rails-:Rdoc!* -:Rdoc! Make the appropriate |:helptags| call and invoke - |:help| rails. - - *rails-:Redit* -:Redit {file} Edit {file}, relative to the application root. - - *rails-:Rlog* -:Rlog [{logfile}] Split window and open {logfile} ($RAILS_ENV or - development by default). The control characters used - for highlighting are removed. If you have a :Tail - command (provided by |tailminusf|.vim), that is used; - otherwise, the file does NOT reload upon change. - Use |:checktime| to tell Vim to check for changes. - |G| has been mapped to do just that prior to jumping - to the end of the file, and q is mapped to close the - window. If the delay in loading is too long, you - might like :Rake log:clear. - - *rails-:Rpreview* -:Rpreview [{path}] Creates a URL from http://localhost:3000/ and the - {path} given. If {path} is omitted, a sensible - default is used (considers the current - controller/template, but does not take routing into - account). The not too useful default is to then edit - this URL using Vim itself, allowing |netrw| to - download it. More useful is to define a :OpenURL - command, which will be used instead (see - |rails-:OpenURL|). - - *rails-:Rpreview!* -:Rpreview! [{path}] As with :Rpreview, except :OpenURL is never used. - - *rails-:Rtags* -:Rtags Calls ctags -R on the current application root. - Exuberant ctags must be installed. - - *rails-:Rrefresh* -:Rrefresh Refreshes certain cached settings. Most noticeably, - this clears the cached list of classes that are syntax - highlighted as railsUserClass. - - *rails-:Rrefresh!* -:Rrefresh! As above, and also reloads rails.vim. - - *rails-:OpenURL* -:OpenURL {url} This is not a command provided by the plugin, but - rather provided by user and utilized by other plugin - features. This command should be defined to open the - provided {url} in a web browser. An example command - on a Mac might be: > - :command -bar -nargs=1 OpenURL :!open <args> -< The following appears to work on Windows: > - :command -bar -nargs=1 OpenURL :!start cmd /cstart /b <args> -< On Debian compatible distributions, the following is - the preferred method: > - :command -bar -nargs=1 OpenURL :!sensible-browser <args> -< If has("mac_gui"), has("win32_gui"), or - executable("sensible-browser") is true, the - corresponding command above will be automatically - defined. Otherwise, you must provide your own (which - is recommended, regardless). - -============================================================================== -NAVIGATION *rails-navigation* - -Navigation is where the real power of this plugin lies. Efficient use of the -following features will greatly ease navigating the Rails file structure. - -The 'path' has been modified to include all the best places to be. -> - :find blog_controller - :find book_test -< - *rails-:Rfind* -:Rfind [{file}] Find {file}. Very similar to :find, but things like - BlogController are properly handled, and if - genutils.vim is installed (1.x not 2.x), tab complete - works. The default filename is taken from under the - cursor in a manner quite similar to gf, described - below. - -File Under Cursor - gf ~ - *rails-gf* -The |gf| command, which normally edits the current file under the cursor, has -been remapped to take context into account. |CTRL-W_f|(open in new window) and -|CTRL-W_gf| (open in new tab) are also remapped. - -Example uses of |gf|, and where they might lead. -(* indicates cursor position) -> - Pos*t.find(:first) -< app/models/post.rb ~ -> - has_many :c*omments -< app/models/comment.rb ~ -> - link_to "Home", :controller => :bl*og -< app/controllers/blog_controller.rb ~ -> - <%= render :partial => 'sh*ared/sidebar' %> -< app/views/shared/_sidebar.rhtml ~ -> - <%= stylesheet_link_tag :scaf*fold %> -< public/stylesheets/scaffold.css ~ -> - class BlogController < Applica*tionController -< app/controllers/application.rb ~ -> - class ApplicationController < ActionCont*roller::Base -< .../action_controller/base.rb ~ -> - fixtures :pos*ts -< test/fixtures/posts.yml ~ -> - layout :pri*nt -< app/views/layouts/print.rhtml ~ -> - <%= link_to "New", new_comme*nt_path %> -< app/controllers/comments_controller.rb (jumps to def new) ~ - -In the last example, the controller and action for the named route are -determined by evaluating routes.rb as Ruby and doing some introspection. This -means code from the application is executed. Keep this in mind when -navigating unfamiliar applications. - -Alternate and Related Files ~ - *rails-alternate-related* -Two commands, :A and :R, are used quickly jump to an "alternate" and a -"related" file, defined below. - - *rails-:A* *rails-:AE* *rails-:AS* *rails-:AV* *rails-:AT* -:A These commands were picked to mimic Michael Sharpe's -:AE a.vim. Briefly, they edit the "alternate" file, in -:AS either the same window (:A and :AE), a new split -:AV window (:AS), a new vertically split window (:AV), or -:AT a new tab (:AT). A mapping for :A is [f . - - *rails-:R* *rails-:RE* *rails-:RS* *rails-:RV* *rails-:RT* -:R These are similar |rails-:A| and friends above, only -:RE they jump to the "related" file rather than the -:RS "alternate." A mapping for :R is ]f . -:RV -:RT - - *rails-alternate* *rails-related* -The alternate file is most frequently the test file, though there are -exceptions. The related file varies, and is sometimes dependent on current -current location in the file. For example, when editing a controller, the -related file is template for the method currently being edited. - -The easiest way to learn these commands is to experiment. A few examples of -alternate and related files follow: - -Current file Alternate file Related file ~ -model unit test related migration -controller (in method) functional test template (view) -template (view) helper controller (jump to method) -migration previous migration next migration -config/routes.rb config/database.yml config/environment.rb - -Suggestions for further contexts to consider for the alternate file, related -file, and file under the cursor are welcome. They are subtly tweaked from -release to release. - -For the less common cases, a more deliberate set of commands are provided. -Each of the following takes an optional argument (with tab completion) but -defaults to a reasonable guess that follows Rails conventions. For example, -when editing app/models/employee.rb, :Rcontroller will default to -app/controllers/employees_controller.rb. The controller and model options, -ideally set from |rails-modelines|, can override the mapping from model -related files to controller related files (Rset controller=hiring) and vice -versa (Rset model=employee). See |rails-:Rset|. - -Each of the following commands has variants for splitting, vertical splitting -and opening in a new tab. For :Rmodel, those variants would be :RSmodel, -:RVmodel, and :RTmodel. There is also :REmodel which is a synonym for :Rmodel -(future versions might allow customization of the behavior of :Rmodel). - - -Model Navigation Commands ~ - *rails-model-navigation* -The default for model navigation commands is the current model, if it can be -determined. For example, test/unit/post_test.rb would have a current model -of post. Otherwise, if a controller name can be determined, said controller -name will be singularized and used. To override this, use a command or -modeline like: > - Rset model=comment - -:Rmodel |rails-:Rmodel| -:Rmigration |rails-:Rmigration| -:Robserver |rails-:Robserver| -:Rfixtures |rails-:Rfixtures| -:Runittest |rails-:Runittest| - - *rails-:Rmodel* -:Rmodel [{name}] Edit the specified model. - - *rails-:Rmigration* -:Rmigration [{pattern}] If {pattern} is a number, find the migration for that - particular set of digits, zero-padding if necessary. - Otherwise, find the newest migration containing the - given pattern. The pattern defaults to the current - model name, pluralized. So when editing the Post - model, :Rmigration with no arguments might find - create_posts.rb, or add_date_to_posts.rb. - - *rails-:Robserver* -:Robserver [{name}] Find the observer with a name like - {model}_observer.rb. When in an observer, most - commands (like :Rmodel) will seek based on the - observed model ({model}) and not the actual observer - ({model}_observer). However, for the command - :Runittest, a file of the form - {model}_observer_test.rb will be found. - - *rails-:Rfixtures* -:Rfixtures [{name}] Edit the fixtures for the given model. If an argument - is given, it must be pluralized, like the final - filename (this may change in the future). If omitted, - the current model is pluralized automatically. An - optional extension can be given, to distinguish - between YAML and CSV fixtures. - - *rails-:Runittest* -:Runittest [{name}] Edit the unit test for the specified model. - -Controller Navigation Commands ~ - *rails-controller-navigation* -The default for controller navigation commands is the current controller, if -it can be determined. For example, test/functional/blog_test.rb would have a -current controller of blog. Otherwise, if a model name can be determined, -said model name will be pluralized and used. To override this, use a command -or modeline like: > - Rset controller=blog - -:Rcontroller |rails-:Rcontroller| -:Rhelper |rails-:Rhelper| -:Rview |rails-:Rview| -:Rlayout |rails-:Rlayout| -:Rfunctionaltest |rails-:Rfunctionaltest| - - *rails-:Rcontroller* -:Rcontroller [{name}] Edit the specified controller. - - *rails-:Rhelper* -:Rhelper [{name}] Edit the helper for the specified controller. - - *rails-:Rview* -:Rview [[{controller}/]{view}] - Edit the specified view. The controller will default - sensibly, and the view name can be omitted when - editing a method of a controller. If a view name is - given with an extension, a new file will be created. - This is a quick way to create a new view. - - *rails-:Rlayout* -:Rlayout [{name}] Edit the specified layout. Defaults to the layout for - the current controller, or the application layout if - that cannot be found. A new layout will be created if - an extension is given. - - *rails-:Rapi* -:Rapi [{name}] Edit the API for the specified controller. This - command is deprecated; add it yourself with - |:Rcommand| if you still desire it. - - *rails-:Rfunctionaltest* -:Rfunctionaltest [{name}] - Edit the functional test for the specified controller. - -Miscellaneous Navigation Commands ~ - *rails-misc-navigation* - -The following commands are not clearly associated with models or controllers. - -:Rstylesheet |rails-:Rstylesheet| -:Rjavascript |rails-:Rjavascript| -:Rplugin |rails-:Rplugin| -:Rlib |rails-:Rlib| -:Rtask |rails-:Rtask| -:Rintegrationtest |rails-:Rintegrationtest| - - *rails-:Rstylesheet* -:Rstylesheet [{name}] Edit the stylesheet for the specified name, defaulting - to the current controller's name. - - *rails-:Rjavascript* -:Rjavascript [{name}] Edit the javascript for the specified name, defaulting - to the current controller's name. - - *rails-:Rplugin* -:Rplugin {plugin}[/{path}] - Edits a file within a plugin. If the path to the file - is omitted, it defaults to init.rb. - - *rails-:Rlib* -:Rlib {name} Edit the library from the lib directory for the - specified name. If the current file is part of a - plugin, the libraries from that plugin can be - specified as well. - - *rails-:Rtask* -:Rtask [{name}] Edit the .rake file from lib/tasks for the specified - name. If the current file is part of a plugin, the - tasks for that plugin can be specified as well. If no - argument is given, either the current plugin's - Rakefile or the application Rakefile will be edited. - - *rails-:Rintegrationtest* -:Rintegrationtest [{name}] - Edit the integration test specified. The default - is based on the current controller or model, with no - singularization or pluralization done. - -Custom Navigation Commands ~ - *rails-custom-navigation* - -It is also possible to create custom navigation commands. This is best done -in an initialization routine of some sort (e.g., an autocommand); see -|rails-configuration| for details. - - *rails-:Rcommand* -:Rcommand [options] {name} [{path} ...] - Create a navigation command with the supplied - name, looking in the supplied paths, using the - supplied options. The -suffix option specifies what - suffix to filter on, and strip from the filename, and - defaults to -suffix=.rb . The -glob option specifies - a file glob to use to find files, _excluding_ the - suffix. Useful values include -glob=* and -glob=**/*. - The -default option specifies a default argument (not - a full path). If it is specified as -default=model(), - -default=controller(), or -default=both(), the current - model, controller, or both (as with :Rintegrationtest) - is used as a default. - -:Rcommand is still under development and far from fully documented, but the -following examples should illustrate the basics: -> - Rcommand api app/apis -glob=**/* -suffix=_api.rb - Rcommand config config -glob=*.* -suffix= -default=routes.rb - Rcommand environment config/environments -default=../environment - Rcommand concern app/concerns -glob=**/* - -Finally, one Vim feature that proves helpful in conjunction with all of the -above is |CTRL-^|. This keystroke edits the previous file, and is helpful to -back out of any of the above commands. - -============================================================================== -SCRIPT WRAPPERS *rails-scripts* - -The following commands are wrappers around the scripts in the script directory -of the Rails application. Most have extra features beyond calling the script. -A limited amount of completion with <Tab> is supported. - - *rails-:Rscript* -:Rscript {script} {options} - Call ruby script/{script} {options}. - - *rails-:Rconsole* -:Rconsole {options} Start script/console. On Windows it will be launched - in the background with |!start|. In the terminal - version GNU Screen is used if it is running and - |g:rails_gnu_screen| is set. - - *rails-:Rrunner* -:[range]Rrunner {code} Executes {code} with script/runner. Differs from - :Rscript runner {code} in that the code is passed as - one argument. Also, |system()| is used instead of - |:!|. This is to help eliminate annoying "Press - ENTER" prompts. If a line number is given in the - range slot, the output is pasted into the buffer after - that line. - - *rails-:Rp* -:[range]Rp {code} Like :Rrunner, but call the Ruby p method on the - result. Literally "p begin {code} end". - - *rails-:Rpp* *rails-:Ry* -:[range]Rpp {code} Like :Rp, but with pp (pretty print) or y (YAML -:[range]Ry {code} output). - - *rails-:Rgenerate* -:Rgenerate {options} Calls script/generate {options}, and then edits the - first file generated. Respects |g:rails_subversion|. - - *rails-:Rdestroy* -:Rdestroy {options} Calls script/destroy {options}. Respects - |g:rails_subversion|. - - *rails-:Rserver* -:Rserver {options} Launches script/server {options} in the background. - On win32, this means |!start|. On other systems, this - uses the --daemon option. - - *rails-:Rserver!* -:Rserver! {options} Same as |:Rserver|, only first attempts to kill any - other server using the same port. On non-Windows - systems, lsof must be installed for this to work. - -============================================================================== -REFACTORING HELPERS *rails-refactoring* - -A few features are dedicated to helping you refactor your code. - -Partial Extraction ~ - *rails-partials* - -The :Rextract command can be used to extract a partial to a new file. - - *rails-:Rextract* -:[range]Rextract [{controller}/]{name} - Create a {name} partial from [range] lines (default: - current line). - - *rails-:Rpartial* -:[range]Rpartial [{controller}/]{name} - Deprecated alias for :Rextract. - -If this is your file, in app/views/blog/show.rhtml: > - - 1 <div> - 2 <h2><%= @post.title %></h2> - 3 <p><%= @post.body %></p> - 4 </div> - -And you issue this command: > - - :2,3Rextract post - -Your file will change to this: > - - 1 <div> - 2 <%= render :partial => 'post' %> - 3 </div> - -And app/views/blog/_post.rhtml will now contain: > - - 1 <h2><%= post.title %></h2> - 2 <p><%= post.body %></p> - -As a special case, if the file had looked like this: > - - 1 <% for object in @posts -%> - 2 <h2><%= object.title %></h2> - 3 <p><%= object.body %></p> - 4 <% end -%> -< -The end result would have been this: > - - 1 <%= render :partial => 'post', :collection => @posts %> -< -The easiest way to choose what to extract is to use |linewise-visual| mode. -Then, a simple > - :'<,'>Rextract blog/post -will suffice. (Note the use of a controller name in this example.) - -Migration Inversion ~ - *rails-migrations* *rails-:Rinvert* -:Rinvert In a migration, rewrite the self.up method into a - self.down method. If self.up is empty, the process is - reversed. This chokes on more complicated - instructions, but works reasonably well for simple - calls to create_table, add_column, and the like. - -============================================================================== -INTEGRATION *rails-integration* - -Having one foot in Rails and one in Vim, rails.vim has two worlds with which -to interact. - -Integration with the Vim Universe ~ - *rails-vim-integration* - -A handful of Vim plugins are enhanced by rails.vim. All plugins mentioned can -be found at http://www.vim.org/. Cream and GUI menus (for lack of a better -place) are also covered in this section. - - *rails-:Rproject* *rails-project* -:Rproject [{file}] This command is only provided when the |project| - plugin is installed. Invoke :Project (typically - without an argument), and search for the root of the - current Rails application. If it is not found, create - a new project, with appropriate directories (app, - etc., but not vendor). - - *rails-:Rproject!* -:Rproject! [{file}] Same as :Rproject, only delete existing project if it - exists and recreate it. The logic to delete the old - project is convoluted and possibly erroneous; report - any problems to the |rails-plugin-author|. A handy - mapping might look something like: > - autocmd User Rails map <buffer> <F6> :Rproject!|silent w<CR> -< As a bonus, this command organizes views into separate - directories for easier navigation. The downside of - this is that you will have to regenerate your project - each time you add another view directory (which is why - this command recreates your project each time!). - - *rails-:Rdbext* *rails-dbext* -:Rdbext [{environment}] This command is only provided when the |dbext| plugin - is installed. Loads the {environment} configuration - (defaults to $RAILS_ENV or development) from - config/database.yml and uses it to configure dbext. - The configuration is cached until a different Rails - application is edited. This command is called for you - automatically when |g:rails_dbext| is set (default on - non-Windows systems). - - *rails-:Rdbext!* -:Rdbext! [{environment}] - Load the database configuration as above, and then - attempt a CREATE DATABASE for it. This is primarily - useful for demonstrations. - - *rails-surround* -The |surround| plugin available from vim.org enables adding and removing -"surroundings" like parentheses, quotes, and HTML tags. Even by itself, it is -quite useful for Rails development, particularly eRuby editing. When coupled -with this plugin, a few additional replacement surroundings are available in -eRuby files. See the |surround| documentation for details on how to use them. -The table below uses ^ to represent the position of the surrounded text. - -Key Surrounding ~ -= <%= ^ %> -- <% ^ -%> -# <%# ^ %> -<C-E> <% ^ -%>\n<% end -%> - -The last surrounding is particularly useful in insert mode with the following -map in one's vimrc. Use Alt+o to open a new line below the current one. This -works nicely even in a terminal (where most alt/meta maps will fail) because -most terminals send <M-o> as <Esc>o anyways. -> - imap <M-o> <Esc>o -< -One can also use the <C-E> surrounding in a plain Ruby file to append a bare -"end" on the following line. - - *rails-cream* -This plugin provides a few additional key bindings if it is running under -Cream, the user friendly editor which uses Vim as a back-end. Ctrl+Enter -finds the file under the cursor (as in |rails-gf|), and Alt+[ and Alt+] find -the alternate (|rails-alternate|) and related (|rails-related|) files. - - *rails-menu* -If the GUI is running, a menu for several commonly used features is provided. -Also on this menu is a list of recently accessed projects. This list of -projects can persist across restarts if a 'viminfo' flag is set to enable -retaining certain global variables. If this interests you, add something like -the following to your vimrc: > - set viminfo^=! -< -Integration with the Rails Universe ~ - *rails-rails-integration* -The general policy of rails.vim is to focus exclusively on the Ruby on Rails -core. Supporting plugins and other add-ons to Rails has the potential to -rapidly get out of hand. However, a few pragmatic exceptions have been made. - - *rails-template-types* -Commands like :Rview use a hardwired list of extensions (rhtml, rjs, etc.) -when searching for files. In order to facilitate working with non-standard -template types, several popular extensions are featured in this list, -including haml, liquid, and mab (markaby). These extensions will disappear -once a related configuration option is added to rails.vim. - - *rails-rspec* -Support for RSpec is currently experimental and incomplete, with only a -handful of features being implemented. :A knows about specs and will jump to -them, but only if no test file is found. The associated controller or model -of a spec is detected, so all navigation commands should work as expected -inside a spec file. :Rfixtures will find spec fixtures, but the extension is -mandatory and tab completion will not work. :Rake will run the currently -edited spec. - -While there are currently no built-in dedicated RSpec navigation commands, you -can approximate your own with |:Rcommand|. -> - Rcommand specmodel spec/models -glob=**/* - \ -suffix=_spec.rb -default=model() - Rcommand spechelper spec/helpers -glob=**/* - \ -suffix=_helper_spec.rb -default=controller() - Rcommand speccontroller spec/controllers -glob=**/* - \ -suffix=_controller_spec.rb -default=controller() - Rcommand specview spec/views -glob=**/* -suffix=_view_spec.rb -< -============================================================================== -ABBREVIATIONS *rails-abbreviations* *rails-snippets* - -Abbreviations are still experimental. They may later be extracted into a -separate plugin, or removed entirely. - - *rails-:Rabbrev* -:Rabbrev List all Rails abbreviations. - -:Rabbrev {abbr} {expn} [{extra}] - Define a new Rails abbreviation. {extra} is permitted - if and only if {expn} ends with "(". - - *rails-:Rabbrev!* -:Rabbrev! {abbr} Remove an abbreviation. - -Rails abbreviations differ from regular abbreviations in that they only expand -after a <C-]> (see |i_CTRL-]|) or a <Tab> (if <Tab> does not work, it is -likely mapped by another plugin). If the abbreviation ends in certain -punctuation marks, additional expansions are possible. A few examples will -hopefully clear this up (all of the following are enabled by default in -appropriate file types). - -Command Sequence typed Resulting text ~ -Rabbrev rp( render :partial\ => rp( render(:partial => -Rabbrev rp( render :partial\ => rp<Tab> render :partial => -Rabbrev vs( validates_size_of vs( validates_size_of( -Rabbrev pa[ params pa[:id] params[:id] -Rabbrev pa[ params pa<C-]> params -Rabbrev pa[ params pa.inspect params.inspect -Rabbrev AR:: ActionRecord AR::Base ActiveRecord::Base -Rabbrev :a :action\ =>\ render :a<Tab> render :action => - -In short, :: expands on :, ( expands on (, and [ expands on both . and [. -These trailing punctuation marks are NOT part of the final abbreviation, and -you cannot have two mappings that differ only by punctuation. - -You must escape spaces in your expansion, either as "\ " or as "<Space>". For -an abbreviation ending with "(", you may define where to insert the -parenthesis by splitting the expansion into two parts (divided by an unescaped -space). - -Many abbreviations abbreviations are provided by default: use :Rabbrev to list -them. They vary depending on the type of file (models have different -abbreviations than controllers). There is one "smart" abbreviation, :c, which -expands to ":controller => ", ":collection => ", or ":conditions => " -depending on context. - -============================================================================== -SYNTAX HIGHLIGHTING *rails-syntax* - -Syntax highlighting is by and large a transparent process. For the full -effect, however, you need a colorscheme which accentuates rails.vim -extensions. One such colorscheme is vividchalk, available from vim.org. - -The following is a summary of the changes made by rails.vim to the standard -syntax highlighting. - - *rails-syntax-keywords* -Rails specific keywords are highlighted in a filetype specific manner. For -example, in a model, has_many is highlighted, whereas in a controller, -before_filter is highlighted. A wide variety of syntax groups are used but -they all link by default to railsMethod. - -If you feel a method has been wrongfully omitted, submit it to the -|rails-plugin-author|. - - *rails-@params* *rails-syntax-deprecated* -Certain deprecated syntax (like @params and render_text) is highlighted as an -error. If you trigger this highlighting, generally it means you need to -update your code. - - *rails-syntax-classes* -Models, helpers, and controllers are given special highlighting. Depending on -the version of Vim installed, you may need a rails.vim aware colorscheme in -order to see this. Said colorscheme needs to provide highlighting for the -railsUserClass syntax group. - -The class names are determined by camelizing filenames from certain -directories of your application. If app/models/line_item.rb exists, the class -"LineItem" will be highlighted. - -The list of classes is refreshed automatically after certain commands like -|:Rgenerate|. Use |:Rrefresh| to trigger the process manually. - - *rails-syntax-assertions* -If you define custom assertions in test_helper.rb, these will be highlighted -in your tests. These are found by scanning test_helper.rb for lines of the -form " def assert_..." and extracting the method name. The railsUserMethod -syntax group is used. The list of assertions can be refreshed with -|:Rrefresh|. - - *rails-syntax-strings* -In the following line of code, the "?" in the conditions clause and the "ASC" -in the order clause will be highlighted: > - Post.find(:all, :conditions => ["body like ?","%e%"] :order => "title ASC") -< -A string literal using %Q<> delimiters will have its contents highlighted as -HTML. This is sometimes useful when writing helpers. > - link = %Q<<a href="http://www.vim.org">Vim</a>> -< - *rails-syntax-yaml* -YAML syntax highlighting has been extended to highlight eRuby, which can be -used in most Rails YAML files (including database.yml and fixtures). - -============================================================================== -MANAGED VIM OPTIONS *rails-options* - -The following options are set local to buffers where the plugin is active. - - *rails-'shiftwidth'* *rails-'sw'* - *rails-'softtabstop'* *rails-'sts'* - *rails-'expandtab'* *rails-'et'* -A value of 2 is used for 'shiftwidth' (and 'softtabstop'), and 'expandtab' is -enabled. This is a strong convention in Rails, so the conventional wisdom -that this is a user preference has been ignored. - - *rails-'path'* *rails-'pa'* -All the relevant directories from your application are added to your 'path'. -This makes it easy to access a buried file: > - :find blog_controller.rb -< - *rails-'suffixesadd'* *rails-'sua'* -This is filetype dependent, but typically includes .rb, .rhtml, and several -others. This allows shortening the above example: > - :find blog_controller -< - *rails-'includeexpr'* *rails-'inex'* -The 'includeexpr' option is set to enable the magic described in |rails-gf|. - - *rails-'statusline'* *rails-'stl'* -Useful information is added to the 'statusline', when |g:rails_statusline| is -enabled. - - *rails-'makeprg'* *rails-'mp'* - *rails-'errorformat'* *rails-'efm'* -Rake is used as the 'makeprg', so |:make| will work as expected. Also, -'errorformat' is set appropriately to handle your tests. - - *rails-'filetype'* *rails-'ft'* -The 'filetype' is sometimes adjusted for Rails files. Most notably, *.rxml -and *.rjs are treated as Ruby files, and files that have been falsely -identified as Mason sources are changed back to eRuby files (but only when -they are part of a Rails application). - - *rails-'completefunc'* *rails-'cfu'* -A 'completefunc' is provided (if not already set). It is very simple, as it -uses syntax highlighting to make its guess. See |i_CTRL-X_CTRL-U|. - -============================================================================== -CONFIGURATION *rails-configuration* - -Very little configuration is actually required; this plugin automatically -detects your Rails application and adjusts Vim sensibly. - - *rails-:autocmd* *rails-autocommands* -If you would like to set your own custom Vim settings whenever a Rails file is -loaded, you can use an autocommand like the following in your vimrc: > - autocmd User Rails silent! Rlcd - autocmd User Rails map <buffer> <F9> :Rake<CR> -You can also have autocommands that only apply to certain types of files. -These are based off the information shown in the 'statusline' (see -|rails-'statusline'|), with hyphens changed to periods. A few examples: > - autocmd User Rails.controller* iabbr <buffer> wsn wsdl_service_name - autocmd User Rails.model.arb* iabbr <buffer> vfo validates_format_of - autocmd User Rails.view.rhtml* imap <buffer> <C-Z> <%= %><C-O>3h -End all such Rails autocommands with asterisks, even if you have an exact -specification. There is also a filename matching syntax: > - autocmd User Rails/db/schema.rb Rset task=db:schema:dump - autocmd User Rails/**/foo_bar.rb Rabbrev FB:: FooBar -Use the filetype based syntax whenever possible, reserving the filename based -syntax for more advanced cases. - - *macros/rails.vim* -If you have several commands to run on initialization for all file types, they -can be placed in a "macros/rails.vim" file in the 'runtimepath' (for example, -"~/.vim/macros/rails.vim"). This file is sourced by rails.vim each time a -Rails file is loaded. - - *config/rails.vim* -If you have settings particular to a specific project, they can be put in a -config/rails.vim file in the root directory of the application. The file is -sourced in the |sandbox| for security reasons. This only works in Vim 7 or -newer. - - *rails-:Rset* -:Rset {option}[={value}] - Query or set a local option. This command may be - called directly, from an autocommand, or from - config/rails.vim. - -Options may be set set in one of four scopes, which my be indicated by an -optional prefix. These scopes determine how broadly an option will apply. -Generally, the default scope is sufficient - -Scope Description ~ -a: All files in one Rails application -b: Buffer (file) specific -g: Global to all applications -l: Local to method (same as b: in non-Ruby files) - -Options are shown below with their default scope, which should be omitted. -While you may override the scope with a prefix, this is rarely necessary and -oftentimes useless. (For example, setting g:task is useless because the -default rake task will apply before considering this option.) - -Option Meaning ~ -b:alternate Custom alternate file for :A, relative to the Rails root -b:controller Default controller for certain commands (e.g., :Rhelper) -b:model Default model for certain commands (e.g., :Rfixtures) -l:preview URL stub for :Rpreview (e.g., blog/show/1) -b:task Default task used with :Rake -l:related Custom related file for :R, relative to the Rails root -a:root_url Root URL for commands like :Rpreview -a:ruby_fork_port Experimental: use ruby_fork on given port to speed things up - -Examples: > - :Rset root_url=http://localhost:12345 - :Rset related=app/views/blog/edit.rhtml preview=blog/edit/1 - :Rset alternate=app/models/ - :Rset l:task=preview " Special pseudo-task for :Rake - -Note the use of a scope prefix in the last example. - - *rails-modelines* -If |g:rails_modelines| is enabled, these options can also be set from -modelines near the beginning or end of the file. These modelines will always -set buffer-local options; scope should never be specified. Examples: > - # Rset task=db:schema:load - <%# Rset alternate=app/views/layouts/application.rhtml %> -Modelines can also be local to a method. Example: > - def test_comment - # rset alternate=app/models/comment.rb -These two forms differ only in case. - -============================================================================== -GLOBAL SETTINGS *rails-global-settings* - -A few global variables control the behavior of this plugin. In general, they -can be enabled by setting them to 1 in your vimrc, and disabled by setting -them to 0. > - let g:rails_some_option=1 - let g:rails_some_option=0 -Most of these should never need to be used. The few that might be interesting -are |g:rails_expensive|, |g:rails_subversion|, and |g:rails_default_database|. - - *g:loaded_rails* > - let g:loaded_rails=1 -Do not load the plugin. For emergency use only. - - *g:rails_abbreviations* -Enable Rails abbreviations. See |rails-abbreviations|. Enabled by default. - - *g:rails_dbext* > - let g:rails_dbext=1 -Enable integration with the dbext plugin, if it is installed. Defaults to the -value of |g:rails_expensive|. When this option is set, dbext settings are -automagically extracted from config/database.yml. Then, you can use features -like table name completion and commands like > - :Create database brablog_development - :Select * from posts where title like '%Denmark%' -Note that dbext is a complicated plugin, and may require additional -configuration. See |dbext| (if installed) and |sql-completion-dynamic| (in -Vim 7). - - *g:rails_default_file* > - let g:rails_default_file='config/database.yml' -File to load when a new Rails application is created, or when loading an -existing project from the menu. Defaults to the README. - - *g:rails_default_database* > - let g:rails_default_database='sqlite3' -Database to use for new applications. Defaults to letting Rails decide. - - *rails-slow* *g:rails_expensive* > - let g:rails_expensive=1 -Enables or disables expensive (slow) features (typically involving calls to -the Ruby interpreter). Recommended for moderately fast computers. This -option used to be disabled by default on Windows, but now it is enabled by -default everywhere. If the Vim Ruby interface is available, this option is -mostly ignored, as spawning a new process is generally the bottleneck for most -expensive operations. Set this option to 0 if you experience painful delays -when first editing a file from a Rails application. - - *rails-screen* *g:rails_gnu_screen* > - let g:rails_gnu_screen=1 -Use GNU Screen (if it is running) to launch |:Rconsole| and |:Rserver| in the -background. Enabled by default. - - *g:rails_history_size* > - let g:rails_history_size=5 -Number of projects to remember. Set to 0 to disable. See |rails-menu| for -information on retaining these projects across a restart. - - *g:rails_mappings* > - let g:rails_mappings=1 -Enables a few mappings (mostly for |rails-navigation|). Enabled by default. - - *g:rails_modelines* > - let g:rails_modelines=1 -Enable modelines like the following: > - # Rset task=db:schema:load -Modelines set buffer-local options using the :Rset command. -Also enables method specific modelines (note the case difference): > - def show - # rset preview=blog/show/1 -Modelines are extremely useful but may cause security concerns when editing -projects from an untrusted source. Enabled by default. - - *g:rails_menu* > - let g:rails_menu=1 -When 2, a Rails menu is created. When 1, this menu is a submenu under the -Plugin menu. The default is 1. - - *g:rails_url* > - let g:rails_url='http://localhost:3000/' -Used for the |:Rpreview| command. Default is as shown above. Overridden by -b:rails_url. - - *g:rails_statusline* > - let g:rails_statusline=1 -Give a clue in the statusline when this plugin is enabled. Enabled by -default. - - *g:rails_subversion* > - let g:rails_subversion=1 -Automatically add/remove files to the subversion repository for commands like -|:Rgenerate| and |:Rdestroy| (but not |:Rscript|). Ignored when the -application is not part of a subversion repository. Disabled by default. - - *g:rails_syntax* > - let g:rails_syntax=1 -When enabled, this tweaks the syntax highlighting to be more Rails friendly. -Enabled by default. See |rails-syntax|. - - *rails-tabs* *g:rails_tabstop* > - let g:rails_tabstop=4 -This option is for people who dislike the default 'shiftwidth' of 2. When -non-zero, all files will have a |:retab|! done with 'tabstop' set to 2 on -load, to convert the initial indent from spaces to tabs. Then, 'tabstop' and -'shiftwidth' will be set to the option's value. The process is reversed on -write. Thus, one can use a custom indent when editing files, yet conform to -Rails conventions when saving them. There is also a local buffer version -of this option, to allow for things like: > - autocmd User Rails if &ft == 'ruby' | let b:rails_tabstop = 4 | endif -This option defaults to 0, which is the recommended value. - -If instead of all this magic, you would prefer to just override this plugin's -settings and use your own custom 'shiftwidth', adjust things manually in an -autocommand: > - autocmd User Rails set sw=4 sts=4 noet -This is highly discouraged: don't fight Rails. - -============================================================================== -ABOUT *rails-about* *rails-plugin-author* - -This plugin was written by Tim Pope. Email him at <vimNOSPAM@tpope.info>. He -can also be found on Freenode's IRC network, hanging out in #rubyonrails and -#vim as tpope. - -The official homepage is - http://rails.vim.tpope.net -The latest stable version can be found at - http://www.vim.org/scripts/script.php?script_id=1567 -In Vim 7, you can keep up to date with |GetLatestVimScripts|. - -Development versions can be found at the following URLs: - http://tpope.us/rails.vba - http://tpope.us/rails.zip - http://svn.tpope.net/rails/vim/railsvim -The first is a |vimball| for Vim 7. The third is a subversion repository -and contains the very latest features and bugs. - -Feedback is highly desired on this plugin. Please send all comments, -complaints, and compliments to the author. No bug is too small to report. - - *rails-license* -This plugin is distributable under the same terms as Vim itself. See -|license|. No warranties, expressed or implied. - -============================================================================== -vim:tw=78:ts=8:ft=help:norl: diff --git a/files/.vim/doc/tags b/files/.vim/doc/tags deleted file mode 100644 index 287a004..0000000 --- a/files/.vim/doc/tags +++ /dev/null @@ -1,896 +0,0 @@ -'NERDChristmasTree' NERD_tree.txt /*'NERDChristmasTree'* -'NERDTreeAutoCenter' NERD_tree.txt /*'NERDTreeAutoCenter'* -'NERDTreeAutoCenterThreshold' NERD_tree.txt /*'NERDTreeAutoCenterThreshold'* -'NERDTreeBookmarksFile' NERD_tree.txt /*'NERDTreeBookmarksFile'* -'NERDTreeCaseSensitiveSort' NERD_tree.txt /*'NERDTreeCaseSensitiveSort'* -'NERDTreeChDirMode' NERD_tree.txt /*'NERDTreeChDirMode'* -'NERDTreeHighlightCursorline' NERD_tree.txt /*'NERDTreeHighlightCursorline'* -'NERDTreeIgnore' NERD_tree.txt /*'NERDTreeIgnore'* -'NERDTreeMouseMode' NERD_tree.txt /*'NERDTreeMouseMode'* -'NERDTreeQuitOnOpen' NERD_tree.txt /*'NERDTreeQuitOnOpen'* -'NERDTreeShowBookmarks' NERD_tree.txt /*'NERDTreeShowBookmarks'* -'NERDTreeShowFiles' NERD_tree.txt /*'NERDTreeShowFiles'* -'NERDTreeShowHidden' NERD_tree.txt /*'NERDTreeShowHidden'* -'NERDTreeShowLineNumbers' NERD_tree.txt /*'NERDTreeShowLineNumbers'* -'NERDTreeSortOrder' NERD_tree.txt /*'NERDTreeSortOrder'* -'NERDTreeWinPos' NERD_tree.txt /*'NERDTreeWinPos'* -'NERDTreeWinSize' NERD_tree.txt /*'NERDTreeWinSize'* -'Tlist_Auto_Highlight_Tag' taglist.txt /*'Tlist_Auto_Highlight_Tag'* -'Tlist_Auto_Open' taglist.txt /*'Tlist_Auto_Open'* -'Tlist_Auto_Update' taglist.txt /*'Tlist_Auto_Update'* -'Tlist_Close_On_Select' taglist.txt /*'Tlist_Close_On_Select'* -'Tlist_Compact_Format' taglist.txt /*'Tlist_Compact_Format'* -'Tlist_Ctags_Cmd' taglist.txt /*'Tlist_Ctags_Cmd'* -'Tlist_Display_Prototype' taglist.txt /*'Tlist_Display_Prototype'* -'Tlist_Display_Tag_Scope' taglist.txt /*'Tlist_Display_Tag_Scope'* -'Tlist_Enable_Fold_Column' taglist.txt /*'Tlist_Enable_Fold_Column'* -'Tlist_Exit_OnlyWindow' taglist.txt /*'Tlist_Exit_OnlyWindow'* -'Tlist_File_Fold_Auto_Close' taglist.txt /*'Tlist_File_Fold_Auto_Close'* -'Tlist_GainFocus_On_ToggleOpen' taglist.txt /*'Tlist_GainFocus_On_ToggleOpen'* -'Tlist_Highlight_Tag_On_BufEnter' taglist.txt /*'Tlist_Highlight_Tag_On_BufEnter'* -'Tlist_Inc_Winwidth' taglist.txt /*'Tlist_Inc_Winwidth'* -'Tlist_Max_Submenu_Items' taglist.txt /*'Tlist_Max_Submenu_Items'* -'Tlist_Max_Tag_Length' taglist.txt /*'Tlist_Max_Tag_Length'* -'Tlist_Process_File_Always' taglist.txt /*'Tlist_Process_File_Always'* -'Tlist_Show_Menu' taglist.txt /*'Tlist_Show_Menu'* -'Tlist_Show_One_File' taglist.txt /*'Tlist_Show_One_File'* -'Tlist_Sort_Type' taglist.txt /*'Tlist_Sort_Type'* -'Tlist_Use_Horiz_Window' taglist.txt /*'Tlist_Use_Horiz_Window'* -'Tlist_Use_Right_Window' taglist.txt /*'Tlist_Use_Right_Window'* -'Tlist_Use_SingleClick' taglist.txt /*'Tlist_Use_SingleClick'* -'Tlist_WinHeight' taglist.txt /*'Tlist_WinHeight'* -'Tlist_WinWidth' taglist.txt /*'Tlist_WinWidth'* -'loaded_nerd_tree' NERD_tree.txt /*'loaded_nerd_tree'* -'snippets' snipMate.txt /*'snippets'* -.snippet snipMate.txt /*.snippet* -.snippets snipMate.txt /*.snippets* -:CSApproxSnapshot CSApprox.txt /*:CSApproxSnapshot* -:MatchDebug matchit.txt /*:MatchDebug* -:NERDTree NERD_tree.txt /*:NERDTree* -:NERDTreeFromBookmark NERD_tree.txt /*:NERDTreeFromBookmark* -:NERDTreeToggle NERD_tree.txt /*:NERDTreeToggle* -:TlistAddFiles taglist.txt /*:TlistAddFiles* -:TlistAddFilesRecursive taglist.txt /*:TlistAddFilesRecursive* -:TlistClose taglist.txt /*:TlistClose* -:TlistDebug taglist.txt /*:TlistDebug* -:TlistHighlightTag taglist.txt /*:TlistHighlightTag* -:TlistLock taglist.txt /*:TlistLock* -:TlistMessages taglist.txt /*:TlistMessages* -:TlistOpen taglist.txt /*:TlistOpen* -:TlistSessionLoad taglist.txt /*:TlistSessionLoad* -:TlistSessionSave taglist.txt /*:TlistSessionSave* -:TlistShowPrototype taglist.txt /*:TlistShowPrototype* -:TlistShowTag taglist.txt /*:TlistShowTag* -:TlistToggle taglist.txt /*:TlistToggle* -:TlistUndebug taglist.txt /*:TlistUndebug* -:TlistUnlock taglist.txt /*:TlistUnlock* -:TlistUpdate taglist.txt /*:TlistUpdate* -CSApprox.txt CSApprox.txt /*CSApprox.txt* -ExtractSnips() snipMate.txt /*ExtractSnips()* -ExtractSnipsFile() snipMate.txt /*ExtractSnipsFile()* -Filename() snipMate.txt /*Filename()* -Lua-Reference lua51refvim.txt /*Lua-Reference* -MatchError matchit.txt /*MatchError* -NERDTree NERD_tree.txt /*NERDTree* -NERDTree-! NERD_tree.txt /*NERDTree-!* -NERDTree-? NERD_tree.txt /*NERDTree-?* -NERDTree-B NERD_tree.txt /*NERDTree-B* -NERDTree-C NERD_tree.txt /*NERDTree-C* -NERDTree-D NERD_tree.txt /*NERDTree-D* -NERDTree-F NERD_tree.txt /*NERDTree-F* -NERDTree-H NERD_tree.txt /*NERDTree-H* -NERDTree-J NERD_tree.txt /*NERDTree-J* -NERDTree-K NERD_tree.txt /*NERDTree-K* -NERDTree-O NERD_tree.txt /*NERDTree-O* -NERDTree-P NERD_tree.txt /*NERDTree-P* -NERDTree-R NERD_tree.txt /*NERDTree-R* -NERDTree-T NERD_tree.txt /*NERDTree-T* -NERDTree-U NERD_tree.txt /*NERDTree-U* -NERDTree-X NERD_tree.txt /*NERDTree-X* -NERDTree-c-j NERD_tree.txt /*NERDTree-c-j* -NERDTree-c-k NERD_tree.txt /*NERDTree-c-k* -NERDTree-contents NERD_tree.txt /*NERDTree-contents* -NERDTree-e NERD_tree.txt /*NERDTree-e* -NERDTree-f NERD_tree.txt /*NERDTree-f* -NERDTree-go NERD_tree.txt /*NERDTree-go* -NERDTree-gtab NERD_tree.txt /*NERDTree-gtab* -NERDTree-m NERD_tree.txt /*NERDTree-m* -NERDTree-o NERD_tree.txt /*NERDTree-o* -NERDTree-p NERD_tree.txt /*NERDTree-p* -NERDTree-q NERD_tree.txt /*NERDTree-q* -NERDTree-r NERD_tree.txt /*NERDTree-r* -NERDTree-t NERD_tree.txt /*NERDTree-t* -NERDTree-tab NERD_tree.txt /*NERDTree-tab* -NERDTree-u NERD_tree.txt /*NERDTree-u* -NERDTree-x NERD_tree.txt /*NERDTree-x* -NERDTreeAuthor NERD_tree.txt /*NERDTreeAuthor* -NERDTreeBookmarkCommands NERD_tree.txt /*NERDTreeBookmarkCommands* -NERDTreeBookmarkTable NERD_tree.txt /*NERDTreeBookmarkTable* -NERDTreeBookmarks NERD_tree.txt /*NERDTreeBookmarks* -NERDTreeChangelog NERD_tree.txt /*NERDTreeChangelog* -NERDTreeCredits NERD_tree.txt /*NERDTreeCredits* -NERDTreeFilesysMenu NERD_tree.txt /*NERDTreeFilesysMenu* -NERDTreeFunctionality NERD_tree.txt /*NERDTreeFunctionality* -NERDTreeGlobalCommands NERD_tree.txt /*NERDTreeGlobalCommands* -NERDTreeInvalidBookmarks NERD_tree.txt /*NERDTreeInvalidBookmarks* -NERDTreeLicense NERD_tree.txt /*NERDTreeLicense* -NERDTreeMappings NERD_tree.txt /*NERDTreeMappings* -NERDTreeOptionDetails NERD_tree.txt /*NERDTreeOptionDetails* -NERDTreeOptionSummary NERD_tree.txt /*NERDTreeOptionSummary* -NERDTreeOptions NERD_tree.txt /*NERDTreeOptions* -NERDTreePublicFunctions NERD_tree.txt /*NERDTreePublicFunctions* -NERDTreeTodo NERD_tree.txt /*NERDTreeTodo* -NERD_tree.txt NERD_tree.txt /*NERD_tree.txt* -ResetSnippets() snipMate.txt /*ResetSnippets()* -Tlist_Get_Tag_Prototype_By_Line() taglist.txt /*Tlist_Get_Tag_Prototype_By_Line()* -Tlist_Get_Tagname_By_Line() taglist.txt /*Tlist_Get_Tagname_By_Line()* -Tlist_Set_App() taglist.txt /*Tlist_Set_App()* -Tlist_Update_File_Tags() taglist.txt /*Tlist_Update_File_Tags()* -[% matchit.txt /*[%* -]% matchit.txt /*]%* -b:match_col matchit.txt /*b:match_col* -b:match_debug matchit.txt /*b:match_debug* -b:match_ignorecase matchit.txt /*b:match_ignorecase* -b:match_ini matchit.txt /*b:match_ini* -b:match_iniBR matchit.txt /*b:match_iniBR* -b:match_match matchit.txt /*b:match_match* -b:match_pat matchit.txt /*b:match_pat* -b:match_skip matchit.txt /*b:match_skip* -b:match_table matchit.txt /*b:match_table* -b:match_tail matchit.txt /*b:match_tail* -b:match_wholeBR matchit.txt /*b:match_wholeBR* -b:match_word matchit.txt /*b:match_word* -b:match_words matchit.txt /*b:match_words* -config/rails.vim rails.txt /*config\/rails.vim* -csapprox CSApprox.txt /*csapprox* -csapprox-+gui CSApprox.txt /*csapprox-+gui* -csapprox-aterm CSApprox.txt /*csapprox-aterm* -csapprox-author CSApprox.txt /*csapprox-author* -csapprox-changelog CSApprox.txt /*csapprox-changelog* -csapprox-configure CSApprox.txt /*csapprox-configure* -csapprox-design CSApprox.txt /*csapprox-design* -csapprox-eterm CSApprox.txt /*csapprox-eterm* -csapprox-gnome-terminal CSApprox.txt /*csapprox-gnome-terminal* -csapprox-gui-support CSApprox.txt /*csapprox-gui-support* -csapprox-hooks CSApprox.txt /*csapprox-hooks* -csapprox-intro CSApprox.txt /*csapprox-intro* -csapprox-iterm.app CSApprox.txt /*csapprox-iterm.app* -csapprox-konsole CSApprox.txt /*csapprox-konsole* -csapprox-kterm CSApprox.txt /*csapprox-kterm* -csapprox-limitations CSApprox.txt /*csapprox-limitations* -csapprox-mlterm CSApprox.txt /*csapprox-mlterm* -csapprox-mrxvt CSApprox.txt /*csapprox-mrxvt* -csapprox-palettes CSApprox.txt /*csapprox-palettes* -csapprox-pterm CSApprox.txt /*csapprox-pterm* -csapprox-putty CSApprox.txt /*csapprox-putty* -csapprox-requirements CSApprox.txt /*csapprox-requirements* -csapprox-roxterm CSApprox.txt /*csapprox-roxterm* -csapprox-screen CSApprox.txt /*csapprox-screen* -csapprox-terminal CSApprox.txt /*csapprox-terminal* -csapprox-terminal-example CSApprox.txt /*csapprox-terminal-example* -csapprox-terminal-list CSApprox.txt /*csapprox-terminal-list* -csapprox-terminal.app CSApprox.txt /*csapprox-terminal.app* -csapprox-terminals-bad CSApprox.txt /*csapprox-terminals-bad* -csapprox-terminals-good CSApprox.txt /*csapprox-terminals-good* -csapprox-toc CSApprox.txt /*csapprox-toc* -csapprox-transparency CSApprox.txt /*csapprox-transparency* -csapprox-urxvt CSApprox.txt /*csapprox-urxvt* -csapprox-wterm CSApprox.txt /*csapprox-wterm* -csapprox-xfce4-terminal CSApprox.txt /*csapprox-xfce4-terminal* -csapprox-xiterm CSApprox.txt /*csapprox-xiterm* -csapprox-xterm CSApprox.txt /*csapprox-xterm* -csapprox.vim CSApprox.txt /*csapprox.vim* -g% matchit.txt /*g%* -g:CSApprox_approximator_function CSApprox.txt /*g:CSApprox_approximator_function* -g:CSApprox_attr_map CSApprox.txt /*g:CSApprox_attr_map* -g:CSApprox_eterm CSApprox.txt /*g:CSApprox_eterm* -g:CSApprox_hook_post CSApprox.txt /*g:CSApprox_hook_post* -g:CSApprox_hook_pre CSApprox.txt /*g:CSApprox_hook_pre* -g:CSApprox_hook_{scheme}_post CSApprox.txt /*g:CSApprox_hook_{scheme}_post* -g:CSApprox_hook_{scheme}_pre CSApprox.txt /*g:CSApprox_hook_{scheme}_pre* -g:CSApprox_konsole CSApprox.txt /*g:CSApprox_konsole* -g:CSApprox_loaded CSApprox.txt /*g:CSApprox_loaded* -g:CSApprox_redirfallback CSApprox.txt /*g:CSApprox_redirfallback* -g:CSApprox_use_showrgb CSApprox.txt /*g:CSApprox_use_showrgb* -g:CSApprox_verbose_level CSApprox.txt /*g:CSApprox_verbose_level* -g:loaded_rails rails.txt /*g:loaded_rails* -g:rails_abbreviations rails.txt /*g:rails_abbreviations* -g:rails_dbext rails.txt /*g:rails_dbext* -g:rails_default_database rails.txt /*g:rails_default_database* -g:rails_default_file rails.txt /*g:rails_default_file* -g:rails_expensive rails.txt /*g:rails_expensive* -g:rails_gnu_screen rails.txt /*g:rails_gnu_screen* -g:rails_history_size rails.txt /*g:rails_history_size* -g:rails_mappings rails.txt /*g:rails_mappings* -g:rails_menu rails.txt /*g:rails_menu* -g:rails_modelines rails.txt /*g:rails_modelines* -g:rails_statusline rails.txt /*g:rails_statusline* -g:rails_subversion rails.txt /*g:rails_subversion* -g:rails_syntax rails.txt /*g:rails_syntax* -g:rails_tabstop rails.txt /*g:rails_tabstop* -g:rails_url rails.txt /*g:rails_url* -g:snippets_dir snipMate.txt /*g:snippets_dir* -g:snips_author snipMate.txt /*g:snips_author* -im_1 imaps.txt /*im_1* -imaps-usage imaps.txt /*imaps-usage* -imaps.txt imaps.txt /*imaps.txt* -imaps.txt-toc imaps.txt /*imaps.txt-toc* -java-parser-history javacomplete.txt /*java-parser-history* -javacomplete-ast javacomplete.txt /*javacomplete-ast* -javacomplete-commands javacomplete.txt /*javacomplete-commands* -javacomplete-compiler javacomplete.txt /*javacomplete-compiler* -javacomplete-constants javacomplete.txt /*javacomplete-constants* -javacomplete-download javacomplete.txt /*javacomplete-download* -javacomplete-faq javacomplete.txt /*javacomplete-faq* -javacomplete-features javacomplete.txt /*javacomplete-features* -javacomplete-functions javacomplete.txt /*javacomplete-functions* -javacomplete-history javacomplete.txt /*javacomplete-history* -javacomplete-install javacomplete.txt /*javacomplete-install* -javacomplete-kindletter javacomplete.txt /*javacomplete-kindletter* -javacomplete-launcher javacomplete.txt /*javacomplete-launcher* -javacomplete-limitations javacomplete.txt /*javacomplete-limitations* -javacomplete-options javacomplete.txt /*javacomplete-options* -javacomplete-overview javacomplete.txt /*javacomplete-overview* -javacomplete-parser javacomplete.txt /*javacomplete-parser* -javacomplete-reflection javacomplete.txt /*javacomplete-reflection* -javacomplete-requirements javacomplete.txt /*javacomplete-requirements* -javacomplete-sample javacomplete.txt /*javacomplete-sample* -javacomplete-thanks javacomplete.txt /*javacomplete-thanks* -javacomplete-todo javacomplete.txt /*javacomplete-todo* -javacomplete-usage javacomplete.txt /*javacomplete-usage* -javacomplete.txt javacomplete.txt /*javacomplete.txt* -lrv-API lua51refvim.txt /*lrv-API* -lrv-Lib lua51refvim.txt /*lrv-Lib* -lrv-LuaSA lua51refvim.txt /*lrv-LuaSA* -lrv-_G lua51refvim.txt /*lrv-_G* -lrv-_VERSION lua51refvim.txt /*lrv-_VERSION* -lrv-__add lua51refvim.txt /*lrv-__add* -lrv-__call lua51refvim.txt /*lrv-__call* -lrv-__concat lua51refvim.txt /*lrv-__concat* -lrv-__div lua51refvim.txt /*lrv-__div* -lrv-__eq lua51refvim.txt /*lrv-__eq* -lrv-__gc lua51refvim.txt /*lrv-__gc* -lrv-__index lua51refvim.txt /*lrv-__index* -lrv-__le lua51refvim.txt /*lrv-__le* -lrv-__len lua51refvim.txt /*lrv-__len* -lrv-__lt lua51refvim.txt /*lrv-__lt* -lrv-__mod lua51refvim.txt /*lrv-__mod* -lrv-__mode lua51refvim.txt /*lrv-__mode* -lrv-__mul lua51refvim.txt /*lrv-__mul* -lrv-__newindex lua51refvim.txt /*lrv-__newindex* -lrv-__pow lua51refvim.txt /*lrv-__pow* -lrv-__sub lua51refvim.txt /*lrv-__sub* -lrv-__tostring lua51refvim.txt /*lrv-__tostring* -lrv-__unm lua51refvim.txt /*lrv-__unm* -lrv-and lua51refvim.txt /*lrv-and* -lrv-apiCClosures lua51refvim.txt /*lrv-apiCClosures* -lrv-apiDebug lua51refvim.txt /*lrv-apiDebug* -lrv-apiError lua51refvim.txt /*lrv-apiError* -lrv-apiFunctions lua51refvim.txt /*lrv-apiFunctions* -lrv-apiPseudoIndices lua51refvim.txt /*lrv-apiPseudoIndices* -lrv-apiRegistry lua51refvim.txt /*lrv-apiRegistry* -lrv-apiStack lua51refvim.txt /*lrv-apiStack* -lrv-apiStackSize lua51refvim.txt /*lrv-apiStackSize* -lrv-assert lua51refvim.txt /*lrv-assert* -lrv-aux lua51refvim.txt /*lrv-aux* -lrv-auxFunctions lua51refvim.txt /*lrv-auxFunctions* -lrv-bibliography lua51refvim.txt /*lrv-bibliography* -lrv-block lua51refvim.txt /*lrv-block* -lrv-break lua51refvim.txt /*lrv-break* -lrv-capture lua51refvim.txt /*lrv-capture* -lrv-cclosure lua51refvim.txt /*lrv-cclosure* -lrv-cfunction lua51refvim.txt /*lrv-cfunction* -lrv-cfunctionexample lua51refvim.txt /*lrv-cfunctionexample* -lrv-chunk lua51refvim.txt /*lrv-chunk* -lrv-closure lua51refvim.txt /*lrv-closure* -lrv-collectgarbage lua51refvim.txt /*lrv-collectgarbage* -lrv-colonsyntax lua51refvim.txt /*lrv-colonsyntax* -lrv-comment lua51refvim.txt /*lrv-comment* -lrv-copyright lua51refvim.txt /*lrv-copyright* -lrv-coroutine lua51refvim.txt /*lrv-coroutine* -lrv-coroutine.create lua51refvim.txt /*lrv-coroutine.create* -lrv-coroutine.resume lua51refvim.txt /*lrv-coroutine.resume* -lrv-coroutine.running lua51refvim.txt /*lrv-coroutine.running* -lrv-coroutine.status lua51refvim.txt /*lrv-coroutine.status* -lrv-coroutine.wrap lua51refvim.txt /*lrv-coroutine.wrap* -lrv-coroutine.yield lua51refvim.txt /*lrv-coroutine.yield* -lrv-debug.debug lua51refvim.txt /*lrv-debug.debug* -lrv-debug.getfenv lua51refvim.txt /*lrv-debug.getfenv* -lrv-debug.gethook lua51refvim.txt /*lrv-debug.gethook* -lrv-debug.getinfo lua51refvim.txt /*lrv-debug.getinfo* -lrv-debug.getlocal lua51refvim.txt /*lrv-debug.getlocal* -lrv-debug.getmetatable lua51refvim.txt /*lrv-debug.getmetatable* -lrv-debug.getregistry lua51refvim.txt /*lrv-debug.getregistry* -lrv-debug.getupvalue lua51refvim.txt /*lrv-debug.getupvalue* -lrv-debug.setfenv lua51refvim.txt /*lrv-debug.setfenv* -lrv-debug.sethook lua51refvim.txt /*lrv-debug.sethook* -lrv-debug.setlocal lua51refvim.txt /*lrv-debug.setlocal* -lrv-debug.setmetatable lua51refvim.txt /*lrv-debug.setmetatable* -lrv-debug.setupvalue lua51refvim.txt /*lrv-debug.setupvalue* -lrv-debug.traceback lua51refvim.txt /*lrv-debug.traceback* -lrv-debugexample lua51refvim.txt /*lrv-debugexample* -lrv-do lua51refvim.txt /*lrv-do* -lrv-doc lua51refvim.txt /*lrv-doc* -lrv-docInstall lua51refvim.txt /*lrv-docInstall* -lrv-docUsage lua51refvim.txt /*lrv-docUsage* -lrv-dofile lua51refvim.txt /*lrv-dofile* -lrv-else lua51refvim.txt /*lrv-else* -lrv-elseif lua51refvim.txt /*lrv-elseif* -lrv-end lua51refvim.txt /*lrv-end* -lrv-environment lua51refvim.txt /*lrv-environment* -lrv-error lua51refvim.txt /*lrv-error* -lrv-false lua51refvim.txt /*lrv-false* -lrv-file:close lua51refvim.txt /*lrv-file:close* -lrv-file:flush lua51refvim.txt /*lrv-file:flush* -lrv-file:lines lua51refvim.txt /*lrv-file:lines* -lrv-file:read lua51refvim.txt /*lrv-file:read* -lrv-file:seek lua51refvim.txt /*lrv-file:seek* -lrv-file:setvbuf lua51refvim.txt /*lrv-file:setvbuf* -lrv-file:write lua51refvim.txt /*lrv-file:write* -lrv-for lua51refvim.txt /*lrv-for* -lrv-function lua51refvim.txt /*lrv-function* -lrv-getfenv lua51refvim.txt /*lrv-getfenv* -lrv-getmetatable lua51refvim.txt /*lrv-getmetatable* -lrv-help lua51refvim.txt /*lrv-help* -lrv-identifiers lua51refvim.txt /*lrv-identifiers* -lrv-if lua51refvim.txt /*lrv-if* -lrv-in lua51refvim.txt /*lrv-in* -lrv-intro lua51refvim.txt /*lrv-intro* -lrv-io.close lua51refvim.txt /*lrv-io.close* -lrv-io.flush lua51refvim.txt /*lrv-io.flush* -lrv-io.input lua51refvim.txt /*lrv-io.input* -lrv-io.lines lua51refvim.txt /*lrv-io.lines* -lrv-io.open lua51refvim.txt /*lrv-io.open* -lrv-io.output lua51refvim.txt /*lrv-io.output* -lrv-io.popen lua51refvim.txt /*lrv-io.popen* -lrv-io.read lua51refvim.txt /*lrv-io.read* -lrv-io.tmpfile lua51refvim.txt /*lrv-io.tmpfile* -lrv-io.type lua51refvim.txt /*lrv-io.type* -lrv-io.write lua51refvim.txt /*lrv-io.write* -lrv-ipairs lua51refvim.txt /*lrv-ipairs* -lrv-langArithOp lua51refvim.txt /*lrv-langArithOp* -lrv-langAssign lua51refvim.txt /*lrv-langAssign* -lrv-langBlocks lua51refvim.txt /*lrv-langBlocks* -lrv-langChunks lua51refvim.txt /*lrv-langChunks* -lrv-langCoercion lua51refvim.txt /*lrv-langCoercion* -lrv-langConcat lua51refvim.txt /*lrv-langConcat* -lrv-langContStructs lua51refvim.txt /*lrv-langContStructs* -lrv-langCoro lua51refvim.txt /*lrv-langCoro* -lrv-langEnvironments lua51refvim.txt /*lrv-langEnvironments* -lrv-langError lua51refvim.txt /*lrv-langError* -lrv-langExpressions lua51refvim.txt /*lrv-langExpressions* -lrv-langForStat lua51refvim.txt /*lrv-langForStat* -lrv-langFuncCalls lua51refvim.txt /*lrv-langFuncCalls* -lrv-langFuncDefs lua51refvim.txt /*lrv-langFuncDefs* -lrv-langFuncStat lua51refvim.txt /*lrv-langFuncStat* -lrv-langGC lua51refvim.txt /*lrv-langGC* -lrv-langGCMeta lua51refvim.txt /*lrv-langGCMeta* -lrv-langLength lua51refvim.txt /*lrv-langLength* -lrv-langLexConv lua51refvim.txt /*lrv-langLexConv* -lrv-langLocalDec lua51refvim.txt /*lrv-langLocalDec* -lrv-langLogOp lua51refvim.txt /*lrv-langLogOp* -lrv-langMetatables lua51refvim.txt /*lrv-langMetatables* -lrv-langPrec lua51refvim.txt /*lrv-langPrec* -lrv-langRelOp lua51refvim.txt /*lrv-langRelOp* -lrv-langStats lua51refvim.txt /*lrv-langStats* -lrv-langTableConst lua51refvim.txt /*lrv-langTableConst* -lrv-langValTypes lua51refvim.txt /*lrv-langValTypes* -lrv-langVariables lua51refvim.txt /*lrv-langVariables* -lrv-langVisibRules lua51refvim.txt /*lrv-langVisibRules* -lrv-langWeaktables lua51refvim.txt /*lrv-langWeaktables* -lrv-language lua51refvim.txt /*lrv-language* -lrv-libBasic lua51refvim.txt /*lrv-libBasic* -lrv-libCoro lua51refvim.txt /*lrv-libCoro* -lrv-libDebug lua51refvim.txt /*lrv-libDebug* -lrv-libIO lua51refvim.txt /*lrv-libIO* -lrv-libMath lua51refvim.txt /*lrv-libMath* -lrv-libModule lua51refvim.txt /*lrv-libModule* -lrv-libOS lua51refvim.txt /*lrv-libOS* -lrv-libString lua51refvim.txt /*lrv-libString* -lrv-libStringPat lua51refvim.txt /*lrv-libStringPat* -lrv-libTable lua51refvim.txt /*lrv-libTable* -lrv-lightuserdata lua51refvim.txt /*lrv-lightuserdata* -lrv-literal lua51refvim.txt /*lrv-literal* -lrv-load lua51refvim.txt /*lrv-load* -lrv-loadfile lua51refvim.txt /*lrv-loadfile* -lrv-loadstring lua51refvim.txt /*lrv-loadstring* -lrv-local lua51refvim.txt /*lrv-local* -lrv-lua lua51refvim.txt /*lrv-lua* -lrv-luaL_Buffer lua51refvim.txt /*lrv-luaL_Buffer* -lrv-luaL_Reg lua51refvim.txt /*lrv-luaL_Reg* -lrv-luaL_addchar lua51refvim.txt /*lrv-luaL_addchar* -lrv-luaL_addlstring lua51refvim.txt /*lrv-luaL_addlstring* -lrv-luaL_addsize lua51refvim.txt /*lrv-luaL_addsize* -lrv-luaL_addstring lua51refvim.txt /*lrv-luaL_addstring* -lrv-luaL_addvalue lua51refvim.txt /*lrv-luaL_addvalue* -lrv-luaL_argcheck lua51refvim.txt /*lrv-luaL_argcheck* -lrv-luaL_argerror lua51refvim.txt /*lrv-luaL_argerror* -lrv-luaL_buffinit lua51refvim.txt /*lrv-luaL_buffinit* -lrv-luaL_callmeta lua51refvim.txt /*lrv-luaL_callmeta* -lrv-luaL_checkany lua51refvim.txt /*lrv-luaL_checkany* -lrv-luaL_checkint lua51refvim.txt /*lrv-luaL_checkint* -lrv-luaL_checkinteger lua51refvim.txt /*lrv-luaL_checkinteger* -lrv-luaL_checklong lua51refvim.txt /*lrv-luaL_checklong* -lrv-luaL_checklstring lua51refvim.txt /*lrv-luaL_checklstring* -lrv-luaL_checknumber lua51refvim.txt /*lrv-luaL_checknumber* -lrv-luaL_checkoption lua51refvim.txt /*lrv-luaL_checkoption* -lrv-luaL_checkstack lua51refvim.txt /*lrv-luaL_checkstack* -lrv-luaL_checkstring lua51refvim.txt /*lrv-luaL_checkstring* -lrv-luaL_checktype lua51refvim.txt /*lrv-luaL_checktype* -lrv-luaL_checkudata lua51refvim.txt /*lrv-luaL_checkudata* -lrv-luaL_dofile lua51refvim.txt /*lrv-luaL_dofile* -lrv-luaL_dostring lua51refvim.txt /*lrv-luaL_dostring* -lrv-luaL_error lua51refvim.txt /*lrv-luaL_error* -lrv-luaL_getmetafield lua51refvim.txt /*lrv-luaL_getmetafield* -lrv-luaL_getmetatable lua51refvim.txt /*lrv-luaL_getmetatable* -lrv-luaL_gsub lua51refvim.txt /*lrv-luaL_gsub* -lrv-luaL_loadbuffer lua51refvim.txt /*lrv-luaL_loadbuffer* -lrv-luaL_loadfile lua51refvim.txt /*lrv-luaL_loadfile* -lrv-luaL_loadstring lua51refvim.txt /*lrv-luaL_loadstring* -lrv-luaL_newmetatable lua51refvim.txt /*lrv-luaL_newmetatable* -lrv-luaL_newstate lua51refvim.txt /*lrv-luaL_newstate* -lrv-luaL_openlibs lua51refvim.txt /*lrv-luaL_openlibs* -lrv-luaL_optint lua51refvim.txt /*lrv-luaL_optint* -lrv-luaL_optinteger lua51refvim.txt /*lrv-luaL_optinteger* -lrv-luaL_optlong lua51refvim.txt /*lrv-luaL_optlong* -lrv-luaL_optlstring lua51refvim.txt /*lrv-luaL_optlstring* -lrv-luaL_optnumber lua51refvim.txt /*lrv-luaL_optnumber* -lrv-luaL_optstring lua51refvim.txt /*lrv-luaL_optstring* -lrv-luaL_prepbuffer lua51refvim.txt /*lrv-luaL_prepbuffer* -lrv-luaL_pushresult lua51refvim.txt /*lrv-luaL_pushresult* -lrv-luaL_ref lua51refvim.txt /*lrv-luaL_ref* -lrv-luaL_register lua51refvim.txt /*lrv-luaL_register* -lrv-luaL_typename lua51refvim.txt /*lrv-luaL_typename* -lrv-luaL_typerror lua51refvim.txt /*lrv-luaL_typerror* -lrv-luaL_unref lua51refvim.txt /*lrv-luaL_unref* -lrv-luaL_where lua51refvim.txt /*lrv-luaL_where* -lrv-lua_Alloc lua51refvim.txt /*lrv-lua_Alloc* -lrv-lua_CFunction lua51refvim.txt /*lrv-lua_CFunction* -lrv-lua_Debug lua51refvim.txt /*lrv-lua_Debug* -lrv-lua_Hook lua51refvim.txt /*lrv-lua_Hook* -lrv-lua_Integer lua51refvim.txt /*lrv-lua_Integer* -lrv-lua_Number lua51refvim.txt /*lrv-lua_Number* -lrv-lua_Reader lua51refvim.txt /*lrv-lua_Reader* -lrv-lua_State lua51refvim.txt /*lrv-lua_State* -lrv-lua_Writer lua51refvim.txt /*lrv-lua_Writer* -lrv-lua_atpanic lua51refvim.txt /*lrv-lua_atpanic* -lrv-lua_call lua51refvim.txt /*lrv-lua_call* -lrv-lua_checkstack lua51refvim.txt /*lrv-lua_checkstack* -lrv-lua_close lua51refvim.txt /*lrv-lua_close* -lrv-lua_concat lua51refvim.txt /*lrv-lua_concat* -lrv-lua_cpcall lua51refvim.txt /*lrv-lua_cpcall* -lrv-lua_createtable lua51refvim.txt /*lrv-lua_createtable* -lrv-lua_dump lua51refvim.txt /*lrv-lua_dump* -lrv-lua_equal lua51refvim.txt /*lrv-lua_equal* -lrv-lua_error lua51refvim.txt /*lrv-lua_error* -lrv-lua_gc lua51refvim.txt /*lrv-lua_gc* -lrv-lua_getallocf lua51refvim.txt /*lrv-lua_getallocf* -lrv-lua_getfenv lua51refvim.txt /*lrv-lua_getfenv* -lrv-lua_getfield lua51refvim.txt /*lrv-lua_getfield* -lrv-lua_getglobal lua51refvim.txt /*lrv-lua_getglobal* -lrv-lua_gethook lua51refvim.txt /*lrv-lua_gethook* -lrv-lua_gethookcount lua51refvim.txt /*lrv-lua_gethookcount* -lrv-lua_gethookmask lua51refvim.txt /*lrv-lua_gethookmask* -lrv-lua_getinfo lua51refvim.txt /*lrv-lua_getinfo* -lrv-lua_getlocal lua51refvim.txt /*lrv-lua_getlocal* -lrv-lua_getmetatable lua51refvim.txt /*lrv-lua_getmetatable* -lrv-lua_getstack lua51refvim.txt /*lrv-lua_getstack* -lrv-lua_gettable lua51refvim.txt /*lrv-lua_gettable* -lrv-lua_gettop lua51refvim.txt /*lrv-lua_gettop* -lrv-lua_getupvalue lua51refvim.txt /*lrv-lua_getupvalue* -lrv-lua_insert lua51refvim.txt /*lrv-lua_insert* -lrv-lua_isboolean lua51refvim.txt /*lrv-lua_isboolean* -lrv-lua_iscfunction lua51refvim.txt /*lrv-lua_iscfunction* -lrv-lua_isfunction lua51refvim.txt /*lrv-lua_isfunction* -lrv-lua_islightuserdata lua51refvim.txt /*lrv-lua_islightuserdata* -lrv-lua_isnil lua51refvim.txt /*lrv-lua_isnil* -lrv-lua_isnumber lua51refvim.txt /*lrv-lua_isnumber* -lrv-lua_isstring lua51refvim.txt /*lrv-lua_isstring* -lrv-lua_istable lua51refvim.txt /*lrv-lua_istable* -lrv-lua_isthread lua51refvim.txt /*lrv-lua_isthread* -lrv-lua_isuserdata lua51refvim.txt /*lrv-lua_isuserdata* -lrv-lua_lessthan lua51refvim.txt /*lrv-lua_lessthan* -lrv-lua_load lua51refvim.txt /*lrv-lua_load* -lrv-lua_newstate lua51refvim.txt /*lrv-lua_newstate* -lrv-lua_newtable lua51refvim.txt /*lrv-lua_newtable* -lrv-lua_newthread lua51refvim.txt /*lrv-lua_newthread* -lrv-lua_newuserdata lua51refvim.txt /*lrv-lua_newuserdata* -lrv-lua_next lua51refvim.txt /*lrv-lua_next* -lrv-lua_objlen lua51refvim.txt /*lrv-lua_objlen* -lrv-lua_pcall lua51refvim.txt /*lrv-lua_pcall* -lrv-lua_pop lua51refvim.txt /*lrv-lua_pop* -lrv-lua_pushboolean lua51refvim.txt /*lrv-lua_pushboolean* -lrv-lua_pushcclosure lua51refvim.txt /*lrv-lua_pushcclosure* -lrv-lua_pushcfunction lua51refvim.txt /*lrv-lua_pushcfunction* -lrv-lua_pushfstring lua51refvim.txt /*lrv-lua_pushfstring* -lrv-lua_pushinteger lua51refvim.txt /*lrv-lua_pushinteger* -lrv-lua_pushlightuserdata lua51refvim.txt /*lrv-lua_pushlightuserdata* -lrv-lua_pushlstring lua51refvim.txt /*lrv-lua_pushlstring* -lrv-lua_pushnil lua51refvim.txt /*lrv-lua_pushnil* -lrv-lua_pushnumber lua51refvim.txt /*lrv-lua_pushnumber* -lrv-lua_pushstring lua51refvim.txt /*lrv-lua_pushstring* -lrv-lua_pushthread lua51refvim.txt /*lrv-lua_pushthread* -lrv-lua_pushvalue lua51refvim.txt /*lrv-lua_pushvalue* -lrv-lua_pushvfstring lua51refvim.txt /*lrv-lua_pushvfstring* -lrv-lua_rawequal lua51refvim.txt /*lrv-lua_rawequal* -lrv-lua_rawget lua51refvim.txt /*lrv-lua_rawget* -lrv-lua_rawgeti lua51refvim.txt /*lrv-lua_rawgeti* -lrv-lua_rawset lua51refvim.txt /*lrv-lua_rawset* -lrv-lua_rawseti lua51refvim.txt /*lrv-lua_rawseti* -lrv-lua_register lua51refvim.txt /*lrv-lua_register* -lrv-lua_remove lua51refvim.txt /*lrv-lua_remove* -lrv-lua_replace lua51refvim.txt /*lrv-lua_replace* -lrv-lua_resume lua51refvim.txt /*lrv-lua_resume* -lrv-lua_setallocf lua51refvim.txt /*lrv-lua_setallocf* -lrv-lua_setfenv lua51refvim.txt /*lrv-lua_setfenv* -lrv-lua_setfield lua51refvim.txt /*lrv-lua_setfield* -lrv-lua_setglobal lua51refvim.txt /*lrv-lua_setglobal* -lrv-lua_sethook lua51refvim.txt /*lrv-lua_sethook* -lrv-lua_setlocal lua51refvim.txt /*lrv-lua_setlocal* -lrv-lua_setmetatable lua51refvim.txt /*lrv-lua_setmetatable* -lrv-lua_settable lua51refvim.txt /*lrv-lua_settable* -lrv-lua_settop lua51refvim.txt /*lrv-lua_settop* -lrv-lua_setupvalue lua51refvim.txt /*lrv-lua_setupvalue* -lrv-lua_status lua51refvim.txt /*lrv-lua_status* -lrv-lua_toboolean lua51refvim.txt /*lrv-lua_toboolean* -lrv-lua_tocfunction lua51refvim.txt /*lrv-lua_tocfunction* -lrv-lua_tointeger lua51refvim.txt /*lrv-lua_tointeger* -lrv-lua_tolstring lua51refvim.txt /*lrv-lua_tolstring* -lrv-lua_tonumber lua51refvim.txt /*lrv-lua_tonumber* -lrv-lua_topointer lua51refvim.txt /*lrv-lua_topointer* -lrv-lua_tostring lua51refvim.txt /*lrv-lua_tostring* -lrv-lua_tothread lua51refvim.txt /*lrv-lua_tothread* -lrv-lua_touserdata lua51refvim.txt /*lrv-lua_touserdata* -lrv-lua_type lua51refvim.txt /*lrv-lua_type* -lrv-lua_typename lua51refvim.txt /*lrv-lua_typename* -lrv-lua_xmove lua51refvim.txt /*lrv-lua_xmove* -lrv-lua_yield lua51refvim.txt /*lrv-lua_yield* -lrv-math.abs lua51refvim.txt /*lrv-math.abs* -lrv-math.acos lua51refvim.txt /*lrv-math.acos* -lrv-math.asin lua51refvim.txt /*lrv-math.asin* -lrv-math.atan lua51refvim.txt /*lrv-math.atan* -lrv-math.atan2 lua51refvim.txt /*lrv-math.atan2* -lrv-math.ceil lua51refvim.txt /*lrv-math.ceil* -lrv-math.cos lua51refvim.txt /*lrv-math.cos* -lrv-math.cosh lua51refvim.txt /*lrv-math.cosh* -lrv-math.deg lua51refvim.txt /*lrv-math.deg* -lrv-math.exp lua51refvim.txt /*lrv-math.exp* -lrv-math.floor lua51refvim.txt /*lrv-math.floor* -lrv-math.fmod lua51refvim.txt /*lrv-math.fmod* -lrv-math.frexp lua51refvim.txt /*lrv-math.frexp* -lrv-math.huge lua51refvim.txt /*lrv-math.huge* -lrv-math.ldexp lua51refvim.txt /*lrv-math.ldexp* -lrv-math.log lua51refvim.txt /*lrv-math.log* -lrv-math.log10 lua51refvim.txt /*lrv-math.log10* -lrv-math.max lua51refvim.txt /*lrv-math.max* -lrv-math.min lua51refvim.txt /*lrv-math.min* -lrv-math.modf lua51refvim.txt /*lrv-math.modf* -lrv-math.pi lua51refvim.txt /*lrv-math.pi* -lrv-math.pow lua51refvim.txt /*lrv-math.pow* -lrv-math.rad lua51refvim.txt /*lrv-math.rad* -lrv-math.random lua51refvim.txt /*lrv-math.random* -lrv-math.randomseed lua51refvim.txt /*lrv-math.randomseed* -lrv-math.sin lua51refvim.txt /*lrv-math.sin* -lrv-math.sinh lua51refvim.txt /*lrv-math.sinh* -lrv-math.sqrt lua51refvim.txt /*lrv-math.sqrt* -lrv-math.tan lua51refvim.txt /*lrv-math.tan* -lrv-math.tanh lua51refvim.txt /*lrv-math.tanh* -lrv-metatable lua51refvim.txt /*lrv-metatable* -lrv-module lua51refvim.txt /*lrv-module* -lrv-names lua51refvim.txt /*lrv-names* -lrv-next lua51refvim.txt /*lrv-next* -lrv-nil lua51refvim.txt /*lrv-nil* -lrv-not lua51refvim.txt /*lrv-not* -lrv-number lua51refvim.txt /*lrv-number* -lrv-numconstant lua51refvim.txt /*lrv-numconstant* -lrv-openlibs lua51refvim.txt /*lrv-openlibs* -lrv-or lua51refvim.txt /*lrv-or* -lrv-os.clock lua51refvim.txt /*lrv-os.clock* -lrv-os.date lua51refvim.txt /*lrv-os.date* -lrv-os.difftime lua51refvim.txt /*lrv-os.difftime* -lrv-os.execute lua51refvim.txt /*lrv-os.execute* -lrv-os.exit lua51refvim.txt /*lrv-os.exit* -lrv-os.getenv lua51refvim.txt /*lrv-os.getenv* -lrv-os.remove lua51refvim.txt /*lrv-os.remove* -lrv-os.rename lua51refvim.txt /*lrv-os.rename* -lrv-os.setlocale lua51refvim.txt /*lrv-os.setlocale* -lrv-os.time lua51refvim.txt /*lrv-os.time* -lrv-os.tmpname lua51refvim.txt /*lrv-os.tmpname* -lrv-package.cpath lua51refvim.txt /*lrv-package.cpath* -lrv-package.loaded lua51refvim.txt /*lrv-package.loaded* -lrv-package.loadlib lua51refvim.txt /*lrv-package.loadlib* -lrv-package.path lua51refvim.txt /*lrv-package.path* -lrv-package.preload lua51refvim.txt /*lrv-package.preload* -lrv-package.seeall lua51refvim.txt /*lrv-package.seeall* -lrv-pairs lua51refvim.txt /*lrv-pairs* -lrv-pattern lua51refvim.txt /*lrv-pattern* -lrv-patternitem lua51refvim.txt /*lrv-patternitem* -lrv-patterns lua51refvim.txt /*lrv-patterns* -lrv-pcall lua51refvim.txt /*lrv-pcall* -lrv-print lua51refvim.txt /*lrv-print* -lrv-pseudoindex lua51refvim.txt /*lrv-pseudoindex* -lrv-rawequal lua51refvim.txt /*lrv-rawequal* -lrv-rawget lua51refvim.txt /*lrv-rawget* -lrv-rawset lua51refvim.txt /*lrv-rawset* -lrv-registry lua51refvim.txt /*lrv-registry* -lrv-repeat lua51refvim.txt /*lrv-repeat* -lrv-require lua51refvim.txt /*lrv-require* -lrv-return lua51refvim.txt /*lrv-return* -lrv-select lua51refvim.txt /*lrv-select* -lrv-setfenv lua51refvim.txt /*lrv-setfenv* -lrv-setmetatable lua51refvim.txt /*lrv-setmetatable* -lrv-stack lua51refvim.txt /*lrv-stack* -lrv-stackexample lua51refvim.txt /*lrv-stackexample* -lrv-stackindex lua51refvim.txt /*lrv-stackindex* -lrv-string lua51refvim.txt /*lrv-string* -lrv-string.byte lua51refvim.txt /*lrv-string.byte* -lrv-string.char lua51refvim.txt /*lrv-string.char* -lrv-string.dump lua51refvim.txt /*lrv-string.dump* -lrv-string.find lua51refvim.txt /*lrv-string.find* -lrv-string.format lua51refvim.txt /*lrv-string.format* -lrv-string.gmatch lua51refvim.txt /*lrv-string.gmatch* -lrv-string.gsub lua51refvim.txt /*lrv-string.gsub* -lrv-string.len lua51refvim.txt /*lrv-string.len* -lrv-string.lower lua51refvim.txt /*lrv-string.lower* -lrv-string.match lua51refvim.txt /*lrv-string.match* -lrv-string.rep lua51refvim.txt /*lrv-string.rep* -lrv-string.reverse lua51refvim.txt /*lrv-string.reverse* -lrv-string.sub lua51refvim.txt /*lrv-string.sub* -lrv-string.upper lua51refvim.txt /*lrv-string.upper* -lrv-table lua51refvim.txt /*lrv-table* -lrv-table.concat lua51refvim.txt /*lrv-table.concat* -lrv-table.foreach lua51refvim.txt /*lrv-table.foreach* -lrv-table.foreachi lua51refvim.txt /*lrv-table.foreachi* -lrv-table.insert lua51refvim.txt /*lrv-table.insert* -lrv-table.maxn lua51refvim.txt /*lrv-table.maxn* -lrv-table.remove lua51refvim.txt /*lrv-table.remove* -lrv-table.sort lua51refvim.txt /*lrv-table.sort* -lrv-tabletraversal lua51refvim.txt /*lrv-tabletraversal* -lrv-tailcall lua51refvim.txt /*lrv-tailcall* -lrv-then lua51refvim.txt /*lrv-then* -lrv-thread lua51refvim.txt /*lrv-thread* -lrv-tonumber lua51refvim.txt /*lrv-tonumber* -lrv-tostring lua51refvim.txt /*lrv-tostring* -lrv-true lua51refvim.txt /*lrv-true* -lrv-type lua51refvim.txt /*lrv-type* -lrv-types lua51refvim.txt /*lrv-types* -lrv-unpack lua51refvim.txt /*lrv-unpack* -lrv-until lua51refvim.txt /*lrv-until* -lrv-upvalue lua51refvim.txt /*lrv-upvalue* -lrv-userdata lua51refvim.txt /*lrv-userdata* -lrv-userdatatype lua51refvim.txt /*lrv-userdatatype* -lrv-vararg lua51refvim.txt /*lrv-vararg* -lrv-weaktable lua51refvim.txt /*lrv-weaktable* -lrv-while lua51refvim.txt /*lrv-while* -lrv-xpcall lua51refvim.txt /*lrv-xpcall* -luaref lua51refvim.txt /*luaref* -luarefvim lua51refvim.txt /*luarefvim* -luarefvim.txt lua51refvim.txt /*luarefvim.txt* -luarefvimdoc lua51refvim.txt /*luarefvimdoc* -macros/rails.vim rails.txt /*macros\/rails.vim* -matchit matchit.txt /*matchit* -matchit-% matchit.txt /*matchit-%* -matchit-\1 matchit.txt /*matchit-\\1* -matchit-activate matchit.txt /*matchit-activate* -matchit-backref matchit.txt /*matchit-backref* -matchit-bugs matchit.txt /*matchit-bugs* -matchit-choose matchit.txt /*matchit-choose* -matchit-configure matchit.txt /*matchit-configure* -matchit-debug matchit.txt /*matchit-debug* -matchit-details matchit.txt /*matchit-details* -matchit-highlight matchit.txt /*matchit-highlight* -matchit-hl matchit.txt /*matchit-hl* -matchit-intro matchit.txt /*matchit-intro* -matchit-languages matchit.txt /*matchit-languages* -matchit-modes matchit.txt /*matchit-modes* -matchit-newlang matchit.txt /*matchit-newlang* -matchit-o_% matchit.txt /*matchit-o_%* -matchit-parse matchit.txt /*matchit-parse* -matchit-s:notend matchit.txt /*matchit-s:notend* -matchit-s:sol matchit.txt /*matchit-s:sol* -matchit-spaces matchit.txt /*matchit-spaces* -matchit-troubleshoot matchit.txt /*matchit-troubleshoot* -matchit-v_% matchit.txt /*matchit-v_%* -matchit.txt matchit.txt /*matchit.txt* -matchit.vim matchit.txt /*matchit.vim* -multi_snip snipMate.txt /*multi_snip* -o_[% matchit.txt /*o_[%* -o_]% matchit.txt /*o_]%* -o_g% matchit.txt /*o_g%* -project project.txt /*project* -project-adding-mappings project.txt /*project-adding-mappings* -project-example project.txt /*project-example* -project-flags project.txt /*project-flags* -project-inheritance project.txt /*project-inheritance* -project-invoking project.txt /*project-invoking* -project-mappings project.txt /*project-mappings* -project-plugin project.txt /*project-plugin* -project-settings project.txt /*project-settings* -project-syntax project.txt /*project-syntax* -project-tips project.txt /*project-tips* -project.txt project.txt /*project.txt* -rails rails.txt /*rails* -rails-'cfu' rails.txt /*rails-'cfu'* -rails-'completefunc' rails.txt /*rails-'completefunc'* -rails-'efm' rails.txt /*rails-'efm'* -rails-'errorformat' rails.txt /*rails-'errorformat'* -rails-'et' rails.txt /*rails-'et'* -rails-'expandtab' rails.txt /*rails-'expandtab'* -rails-'filetype' rails.txt /*rails-'filetype'* -rails-'ft' rails.txt /*rails-'ft'* -rails-'includeexpr' rails.txt /*rails-'includeexpr'* -rails-'inex' rails.txt /*rails-'inex'* -rails-'makeprg' rails.txt /*rails-'makeprg'* -rails-'mp' rails.txt /*rails-'mp'* -rails-'pa' rails.txt /*rails-'pa'* -rails-'path' rails.txt /*rails-'path'* -rails-'shiftwidth' rails.txt /*rails-'shiftwidth'* -rails-'softtabstop' rails.txt /*rails-'softtabstop'* -rails-'statusline' rails.txt /*rails-'statusline'* -rails-'stl' rails.txt /*rails-'stl'* -rails-'sts' rails.txt /*rails-'sts'* -rails-'sua' rails.txt /*rails-'sua'* -rails-'suffixesadd' rails.txt /*rails-'suffixesadd'* -rails-'sw' rails.txt /*rails-'sw'* -rails-:A rails.txt /*rails-:A* -rails-:AE rails.txt /*rails-:AE* -rails-:AS rails.txt /*rails-:AS* -rails-:AT rails.txt /*rails-:AT* -rails-:AV rails.txt /*rails-:AV* -rails-:OpenURL rails.txt /*rails-:OpenURL* -rails-:R rails.txt /*rails-:R* -rails-:RE rails.txt /*rails-:RE* -rails-:RS rails.txt /*rails-:RS* -rails-:RT rails.txt /*rails-:RT* -rails-:RV rails.txt /*rails-:RV* -rails-:Rabbrev rails.txt /*rails-:Rabbrev* -rails-:Rabbrev! rails.txt /*rails-:Rabbrev!* -rails-:Rails rails.txt /*rails-:Rails* -rails-:Rake rails.txt /*rails-:Rake* -rails-:Rake! rails.txt /*rails-:Rake!* -rails-:Rapi rails.txt /*rails-:Rapi* -rails-:Rcd rails.txt /*rails-:Rcd* -rails-:Rcommand rails.txt /*rails-:Rcommand* -rails-:Rconsole rails.txt /*rails-:Rconsole* -rails-:Rcontroller rails.txt /*rails-:Rcontroller* -rails-:Rdbext rails.txt /*rails-:Rdbext* -rails-:Rdbext! rails.txt /*rails-:Rdbext!* -rails-:Rdestroy rails.txt /*rails-:Rdestroy* -rails-:Rdoc rails.txt /*rails-:Rdoc* -rails-:Rdoc! rails.txt /*rails-:Rdoc!* -rails-:Redit rails.txt /*rails-:Redit* -rails-:Rextract rails.txt /*rails-:Rextract* -rails-:Rfind rails.txt /*rails-:Rfind* -rails-:Rfixtures rails.txt /*rails-:Rfixtures* -rails-:Rfunctionaltest rails.txt /*rails-:Rfunctionaltest* -rails-:Rgenerate rails.txt /*rails-:Rgenerate* -rails-:Rhelper rails.txt /*rails-:Rhelper* -rails-:Rintegrationtest rails.txt /*rails-:Rintegrationtest* -rails-:Rinvert rails.txt /*rails-:Rinvert* -rails-:Rjavascript rails.txt /*rails-:Rjavascript* -rails-:Rlayout rails.txt /*rails-:Rlayout* -rails-:Rlcd rails.txt /*rails-:Rlcd* -rails-:Rlib rails.txt /*rails-:Rlib* -rails-:Rlog rails.txt /*rails-:Rlog* -rails-:Rmigration rails.txt /*rails-:Rmigration* -rails-:Rmodel rails.txt /*rails-:Rmodel* -rails-:Robserver rails.txt /*rails-:Robserver* -rails-:Rp rails.txt /*rails-:Rp* -rails-:Rpartial rails.txt /*rails-:Rpartial* -rails-:Rplugin rails.txt /*rails-:Rplugin* -rails-:Rpp rails.txt /*rails-:Rpp* -rails-:Rpreview rails.txt /*rails-:Rpreview* -rails-:Rpreview! rails.txt /*rails-:Rpreview!* -rails-:Rproject rails.txt /*rails-:Rproject* -rails-:Rproject! rails.txt /*rails-:Rproject!* -rails-:Rrefresh rails.txt /*rails-:Rrefresh* -rails-:Rrefresh! rails.txt /*rails-:Rrefresh!* -rails-:Rrunner rails.txt /*rails-:Rrunner* -rails-:Rscript rails.txt /*rails-:Rscript* -rails-:Rserver rails.txt /*rails-:Rserver* -rails-:Rserver! rails.txt /*rails-:Rserver!* -rails-:Rset rails.txt /*rails-:Rset* -rails-:Rstylesheet rails.txt /*rails-:Rstylesheet* -rails-:Rtags rails.txt /*rails-:Rtags* -rails-:Rtask rails.txt /*rails-:Rtask* -rails-:Runittest rails.txt /*rails-:Runittest* -rails-:Rview rails.txt /*rails-:Rview* -rails-:Ry rails.txt /*rails-:Ry* -rails-:autocmd rails.txt /*rails-:autocmd* -rails-@params rails.txt /*rails-@params* -rails-abbreviations rails.txt /*rails-abbreviations* -rails-about rails.txt /*rails-about* -rails-alternate rails.txt /*rails-alternate* -rails-alternate-related rails.txt /*rails-alternate-related* -rails-autocommands rails.txt /*rails-autocommands* -rails-commands rails.txt /*rails-commands* -rails-configuration rails.txt /*rails-configuration* -rails-controller-navigation rails.txt /*rails-controller-navigation* -rails-cream rails.txt /*rails-cream* -rails-custom-navigation rails.txt /*rails-custom-navigation* -rails-dbext rails.txt /*rails-dbext* -rails-gf rails.txt /*rails-gf* -rails-global-settings rails.txt /*rails-global-settings* -rails-install-plugin rails.txt /*rails-install-plugin* -rails-install-vim rails.txt /*rails-install-vim* -rails-installation rails.txt /*rails-installation* -rails-integration rails.txt /*rails-integration* -rails-introduction rails.txt /*rails-introduction* -rails-license rails.txt /*rails-license* -rails-menu rails.txt /*rails-menu* -rails-migrations rails.txt /*rails-migrations* -rails-misc-navigation rails.txt /*rails-misc-navigation* -rails-model-navigation rails.txt /*rails-model-navigation* -rails-modelines rails.txt /*rails-modelines* -rails-navigation rails.txt /*rails-navigation* -rails-options rails.txt /*rails-options* -rails-partials rails.txt /*rails-partials* -rails-plugin-author rails.txt /*rails-plugin-author* -rails-project rails.txt /*rails-project* -rails-rails-integration rails.txt /*rails-rails-integration* -rails-refactoring rails.txt /*rails-refactoring* -rails-related rails.txt /*rails-related* -rails-rspec rails.txt /*rails-rspec* -rails-screen rails.txt /*rails-screen* -rails-scripts rails.txt /*rails-scripts* -rails-slow rails.txt /*rails-slow* -rails-snippets rails.txt /*rails-snippets* -rails-surround rails.txt /*rails-surround* -rails-syntax rails.txt /*rails-syntax* -rails-syntax-assertions rails.txt /*rails-syntax-assertions* -rails-syntax-classes rails.txt /*rails-syntax-classes* -rails-syntax-deprecated rails.txt /*rails-syntax-deprecated* -rails-syntax-keywords rails.txt /*rails-syntax-keywords* -rails-syntax-strings rails.txt /*rails-syntax-strings* -rails-syntax-yaml rails.txt /*rails-syntax-yaml* -rails-tabs rails.txt /*rails-tabs* -rails-template-types rails.txt /*rails-template-types* -rails-vim-integration rails.txt /*rails-vim-integration* -rails.txt rails.txt /*rails.txt* -snipMate snipMate.txt /*snipMate* -snipMate-$# snipMate.txt /*snipMate-$#* -snipMate-${#:} snipMate.txt /*snipMate-${#:}* -snipMate-${#} snipMate.txt /*snipMate-${#}* -snipMate-author snipMate.txt /*snipMate-author* -snipMate-commands snipMate.txt /*snipMate-commands* -snipMate-contact snipMate.txt /*snipMate-contact* -snipMate-description snipMate.txt /*snipMate-description* -snipMate-disadvantages snipMate.txt /*snipMate-disadvantages* -snipMate-expandtab snipMate.txt /*snipMate-expandtab* -snipMate-features snipMate.txt /*snipMate-features* -snipMate-filename snipMate.txt /*snipMate-filename* -snipMate-indenting snipMate.txt /*snipMate-indenting* -snipMate-placeholders snipMate.txt /*snipMate-placeholders* -snipMate-remap snipMate.txt /*snipMate-remap* -snipMate-settings snipMate.txt /*snipMate-settings* -snipMate-usage snipMate.txt /*snipMate-usage* -snipMate.txt snipMate.txt /*snipMate.txt* -snippet snipMate.txt /*snippet* -snippet-syntax snipMate.txt /*snippet-syntax* -snippets snipMate.txt /*snippets* -taglist-commands taglist.txt /*taglist-commands* -taglist-debug taglist.txt /*taglist-debug* -taglist-extend taglist.txt /*taglist-extend* -taglist-faq taglist.txt /*taglist-faq* -taglist-functions taglist.txt /*taglist-functions* -taglist-install taglist.txt /*taglist-install* -taglist-internet taglist.txt /*taglist-internet* -taglist-intro taglist.txt /*taglist-intro* -taglist-keys taglist.txt /*taglist-keys* -taglist-license taglist.txt /*taglist-license* -taglist-menu taglist.txt /*taglist-menu* -taglist-options taglist.txt /*taglist-options* -taglist-requirements taglist.txt /*taglist-requirements* -taglist-session taglist.txt /*taglist-session* -taglist-todo taglist.txt /*taglist-todo* -taglist-using taglist.txt /*taglist-using* -taglist.txt taglist.txt /*taglist.txt* -v_[% matchit.txt /*v_[%* -v_]% matchit.txt /*v_]%* -v_a% matchit.txt /*v_a%* -v_g% matchit.txt /*v_g%* -xml-plugin-callbacks xml-plugin.txt /*xml-plugin-callbacks* -xml-plugin-html xml-plugin.txt /*xml-plugin-html* -xml-plugin-mappings xml-plugin.txt /*xml-plugin-mappings* -xml-plugin-settings xml-plugin.txt /*xml-plugin-settings* -xml-plugin.txt xml-plugin.txt /*xml-plugin.txt* |
