mirror of
https://github.com/lua/lua
synced 2025-03-23 14:12:52 +03:00
lhf corrections + new gsub
This commit is contained in:
parent
e931c7c0f6
commit
6b78040840
370
manual.tex
370
manual.tex
@ -1,4 +1,4 @@
|
||||
% $Id: manual.tex,v 1.30 1997/06/09 18:16:33 roberto Exp roberto $
|
||||
% $Id: manual.tex,v 2.0 1997/06/17 18:45:16 roberto Exp roberto $
|
||||
|
||||
\documentstyle[fullpage,11pt,bnf]{article}
|
||||
|
||||
@ -31,13 +31,13 @@ Luiz Henrique de Figueiredo\quad
|
||||
Waldemar Celes
|
||||
\vspace{1.0ex}\\
|
||||
\smallskip
|
||||
\small\tt lua@icad.puc-rio.br
|
||||
\small\tt lua@tecgraf.puc-rio.br
|
||||
\vspace{2.0ex}\\
|
||||
%MCC 08/95 ---
|
||||
\tecgraf\ --- Departamento de Inform\'atica --- PUC-Rio
|
||||
\tecgraf\ --- Computer Science Department --- PUC-Rio
|
||||
}
|
||||
|
||||
\date{\small \verb$Date: 1997/06/09 18:16:33 $}
|
||||
\date{\small \verb$Date: 1997/06/17 18:45:16 $}
|
||||
|
||||
\maketitle
|
||||
|
||||
@ -71,8 +71,10 @@ a intera\c{c}\~ao entre programas Lua e programas C hospedeiros.
|
||||
\begin{quotation}
|
||||
\noindent
|
||||
\footnotesize
|
||||
Copyright (c) 1994--1997 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,
|
||||
Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.
|
||||
Copyright \copyright\ 1994--1997 TeCGraf, PUC-Rio.
|
||||
Written by Waldemar Celes Filho,
|
||||
Roberto Ierusalimschy, Luiz Henrique de Figueiredo.
|
||||
All rights reserved.
|
||||
%
|
||||
Permission is hereby granted, without written agreement and without license or
|
||||
royalty fees, to use, copy, modify, and distribute this software and its
|
||||
@ -81,17 +83,20 @@ documentation for any purpose, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall appear in all
|
||||
copies or substantial portions of this software.
|
||||
%
|
||||
The name "Lua" cannot be used for any modified form of this software that does
|
||||
not originate from the authors. Nevertheless, the name "Lua" may and should be
|
||||
The name ``Lua'' cannot be used for any modified form
|
||||
of this software that does not originate from the authors.
|
||||
Nevertheless, the name ``Lua'' may and should be
|
||||
used to designate the language implemented and described in this package,
|
||||
even if embedded in any other system, as long as its syntax and semantics
|
||||
remain unchanged.
|
||||
%
|
||||
The authors specifically disclaim any warranties, including, but not limited
|
||||
to, the implied warranties of merchantability and fitness for a particular
|
||||
purpose. The software provided hereunder is on an "as is" basis, and the
|
||||
The authors specifically disclaim any warranties, including,
|
||||
but not limited to, the implied warranties of merchantability
|
||||
and fitness for a particular purpose.
|
||||
The software provided hereunder is on an ``as is'' basis, and the
|
||||
authors have no obligation to provide maintenance, support, updates,
|
||||
enhancements, or modifications. In no event shall TeCGraf, PUC-Rio, or the
|
||||
enhancements, or modifications.
|
||||
In no event shall TeCGraf, PUC-Rio, or the
|
||||
authors be liable to any party for direct, indirect, special, incidental, or
|
||||
consequential damages arising out of the use of this software and its
|
||||
documentation.
|
||||
@ -110,7 +115,7 @@ documentation.
|
||||
\section{Introduction}
|
||||
|
||||
Lua is an extension programming language designed to support
|
||||
general procedural programming features with data description
|
||||
general procedural programming with data description
|
||||
facilities.
|
||||
It is intended to be used as a light-weight, but powerful,
|
||||
configuration language for any program that needs one.
|
||||
@ -127,11 +132,12 @@ This host program can invoke functions to execute a piece of
|
||||
code in Lua, 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
|
||||
many, completely different domains,
|
||||
a wide range of different domains,
|
||||
thus creating customized programming languages sharing a syntactical framework.
|
||||
|
||||
Lua is free-distribution software,
|
||||
and provided as usual with no guarantees.
|
||||
and provided as usual with no guarantees,
|
||||
as stated in the copyright notice in the front page of this manual.
|
||||
The implementation described in this manual is available
|
||||
at the following URL's:
|
||||
\begin{verbatim}
|
||||
@ -155,7 +161,8 @@ using functions in the library that implements Lua.
|
||||
\Index{Global variables} do not need declaration.
|
||||
Any variable is assumed to be global unless explicitly declared local
|
||||
\see{localvar}.
|
||||
Before the first assignment, the value of a global variable is \nil.
|
||||
Before the first assignment, the value of a global variable is \nil;
|
||||
this default can be changed \see{tag-method}.
|
||||
|
||||
The unit of execution of Lua is called a \Def{chunk}.
|
||||
The syntax%
|
||||
@ -178,7 +185,8 @@ of new functions%
|
||||
\footnote{Actually, a function definition is an
|
||||
assignment to a global variable \see{TypesSec}.}.
|
||||
|
||||
Chunks may be pre-compiled; see program \IndexVerb{luac} for details.
|
||||
Chunks may be pre-compiled into binary form;
|
||||
see program \IndexVerb{luac} for details.
|
||||
Text files with chunks and their binary pre-compiled forms
|
||||
are interchangeable.
|
||||
Lua automatically detects the file type and acts accordingly.
|
||||
@ -196,10 +204,10 @@ There are six \Index{basic types} in Lua: \Def{nil}, \Def{number},
|
||||
\Def{string}, \Def{function}, \Def{userdata}, and \Def{table}.
|
||||
{\em Nil\/} is the type of the value \nil,
|
||||
whose main property is to be different from any other value.
|
||||
{\em Number\/} represents real (floating point) numbers,
|
||||
{\em Number\/} represents real (floating-point) numbers,
|
||||
while {\em string\/} has the usual meaning.
|
||||
The function \verb|type| returns a string describing the type
|
||||
of a given value.
|
||||
of a given value \see{pdf-type}.
|
||||
|
||||
Functions are considered first-class values in Lua.
|
||||
This means that functions can be stored in variables,
|
||||
@ -210,7 +218,8 @@ Lua can call (and manipulate) functions written in Lua and
|
||||
functions written in C.
|
||||
They can be distinguished by their tags:
|
||||
all Lua functions have the same tag,
|
||||
which is different from the tag for all C functions.
|
||||
and all C functions have the same tag,
|
||||
which is different from the tag of a Lua function.
|
||||
|
||||
The type {\em userdata\/} is provided to allow
|
||||
arbitrary \Index{C pointers} to be stored in Lua variables.
|
||||
@ -233,7 +242,7 @@ Because functions are first class values,
|
||||
table fields may contain functions.
|
||||
The form \verb|t:f(x)| is syntactic sugar for \verb|t.f(t,x)|,
|
||||
which calls the method \verb|f| from the table \verb|t| passing
|
||||
itself as the first parameter.
|
||||
itself as the first parameter \see{func-def}.
|
||||
|
||||
It is important to notice that tables are {\em objects}, and not values.
|
||||
Variables cannot contain tables, only {\em references\/} to them.
|
||||
@ -244,10 +253,10 @@ Moreover, tables must be explicitly created before used
|
||||
|
||||
Tags are mainly used to select tag methods when
|
||||
some events occur \see{tag-method}.
|
||||
Each of the types nil, number and string have a different tag.
|
||||
Each of the types nil, number and string has a different tag.
|
||||
All values of each of these types have this same pre-defined tag.
|
||||
Values of type function may have two different tags,
|
||||
depending whether they are Lua or C functions.
|
||||
Values of type function can have two different tags,
|
||||
depending on whether they are Lua or C functions.
|
||||
Finally,
|
||||
values of type userdata and table can have
|
||||
as many different tags as needed \see{tag-method}.
|
||||
@ -264,7 +273,7 @@ This section describes the lexis, the syntax and the semantics of Lua.
|
||||
|
||||
\subsection{Lexical Conventions} \label{lexical}
|
||||
|
||||
Lua is a case sensitive language.
|
||||
Lua is a case-sensitive language.
|
||||
\Index{Identifiers} can be any string of letters, digits, and underscores,
|
||||
not beginning with a digit.
|
||||
The following words are reserved, and cannot be used as identifiers:
|
||||
@ -295,8 +304,8 @@ other quoted strings.
|
||||
|
||||
\Index{Comments} start anywhere outside a string with a
|
||||
double hyphen (\verb|--|) and run until the end of the line.
|
||||
Moreover, if the first line of a chunk file starts with \verb|#|,
|
||||
this line is skipped%
|
||||
Moreover,
|
||||
the first line of a chunk file is skipped if it starts with \verb|#|%
|
||||
\footnote{This facility allows the use of Lua as a script interpreter
|
||||
in Unix systems \see{lua-sa}.}.
|
||||
|
||||
@ -314,10 +323,10 @@ The \verb|$| can be followed by any of the following directives:
|
||||
\begin{description}
|
||||
\item[{\tt debug}] --- turn on some debugging facilities \see{pragma}.
|
||||
\item[{\tt nodebug}] --- turn off some debugging facilities \see{pragma}.
|
||||
\item[{\tt if \M{cond}}] --- starts a condicional part.
|
||||
If \M{cond} is false, this part is skiped by the lexical analizer.
|
||||
\item[{\tt ifnot \M{cond}}] --- starts a condicional part.
|
||||
If \M{cond} is true, this part is skiped by the lexical analizer.
|
||||
\item[{\tt if \M{cond}}] --- starts a conditional part.
|
||||
If \M{cond} is false, then this part is skipped by the lexical analyzer.
|
||||
\item[{\tt ifnot \M{cond}}] --- starts a conditional part.
|
||||
If \M{cond} is true, then this part is skipped by the lexical analyzer.
|
||||
\item[{\tt end}] --- ends a conditional part.
|
||||
\item[{\tt else}] --- starts an ``else'' conditional part,
|
||||
switching the ``skip'' status.
|
||||
@ -325,15 +334,16 @@ switching the ``skip'' status.
|
||||
\end{description}
|
||||
|
||||
Directives can be freely nested.
|
||||
Particularlly, a \verb|$endinput| may ocurr inside a \verb|$if|;
|
||||
Particularly, a \verb|$endinput| may occur inside a \verb|$if|;
|
||||
in that case, even the matching \verb|$end| is not parsed.
|
||||
|
||||
A \M{cond} part may be:
|
||||
\begin{description}
|
||||
\item[{\tt nil}] --- always false.
|
||||
\item[{\tt 1}] --- always true.
|
||||
\item[\M{name}] --- true if global variable \M{name} is different from \nil.
|
||||
Notice that this is evaluated before the chunk starts its execution.
|
||||
\item[\M{name}] --- true if the value of the
|
||||
global variable \M{name} is different from \nil.
|
||||
Notice that \M{name} is evaluated before the chunk starts its execution.
|
||||
Therefore, actions in a chunk do not affect its own conditional directives.
|
||||
\end{description}
|
||||
|
||||
@ -389,7 +399,8 @@ This restriction also avoids some ``statement not reached'' conditions.
|
||||
|
||||
\subsubsection{\Index{Assignment}} \label{assignment}
|
||||
The language allows \Index{multiple assignment}.
|
||||
Therefore, the syntax defines a list of variables on the left side,
|
||||
Therefore, the syntax for assignment
|
||||
defines a list of variables on the left side,
|
||||
and a list of expressions on the right side.
|
||||
Both lists have their elements separated by commas:
|
||||
\begin{Produc}
|
||||
@ -403,6 +414,7 @@ Therefore, it can be used to exchange two values, as in
|
||||
\begin{verbatim}
|
||||
x, y = y, x
|
||||
\end{verbatim}
|
||||
The two lists may have different lengths.
|
||||
Before the assignment, the list of values is {\em adjusted\/} to
|
||||
the length of the list of variables \see{adjust}.
|
||||
|
||||
@ -422,10 +434,12 @@ The meaning of assignments and evaluations of global variables and
|
||||
indexed variables can be changed by tag methods \see{tag-method}.
|
||||
Actually,
|
||||
an assignment \verb|x = val|, where \verb|x| is a global variable,
|
||||
is equivalent to a call \verb|setglobal('x', val)|,
|
||||
and an assignment \verb|t[i] = val| is equivalent to
|
||||
\verb|settable(t, i, val)|.
|
||||
See \See{tag-method} for a description of these ``functions''.
|
||||
is equivalent to a call \verb|setglobal('x', val)|;
|
||||
an assignment \verb|t[i] = val| is equivalent to
|
||||
\verb|settable_event(t, i, val)|.
|
||||
See \See{tag-method} for a description of these functions%
|
||||
\footnote{Function \verb|setglobal| is pre-defined in Lua.
|
||||
Function {\tt settable\_event} is used only for explanation purposes.}.
|
||||
|
||||
The syntax \verb|var.NAME| is just syntactic sugar for
|
||||
\verb|var["NAME"]|:
|
||||
@ -498,27 +512,27 @@ Variables are explained in Section~\ref{assignment}.
|
||||
An access to a global variable \verb|x| is equivalent to a
|
||||
call \verb|getglobal('x')|;
|
||||
an access to an indexed variable \verb|t[i]| is equivalent to
|
||||
a call \verb|gettable(t, i)|.
|
||||
See \See{tag-method} for a description of these ``functions''.
|
||||
a call \verb|gettable_event(t, i)|.
|
||||
See \See{tag-method} for a description of these functions%
|
||||
\footnote{Function \verb|getglobal| is pre-defined in Lua.
|
||||
Function {\tt gettable\_event} is used only for explanation purposes.}.
|
||||
|
||||
The non-terminal \verb|exp1| is used to indicate that the values
|
||||
The non-terminal \M{exp1} is used to indicate that the values
|
||||
returned by an expression must be adjusted to one single value:
|
||||
\begin{Produc}
|
||||
\produc{exp1}{exp}
|
||||
\end{Produc}
|
||||
|
||||
\subsubsection{Arithmetic Operators}
|
||||
Lua supports the usual \Index{arithmetic operators}.
|
||||
These operators are the binary
|
||||
\verb|+| (addition),
|
||||
\verb|-| (subtraction),
|
||||
\verb|*| (multiplication),
|
||||
Lua supports the usual \Index{arithmetic operators}:
|
||||
the binary \verb|+| (addition),
|
||||
\verb|-| (subtraction), \verb|*| (multiplication),
|
||||
\verb|/| (division) and \verb|^| (exponentiation),
|
||||
and the unary \verb|-| (negation).
|
||||
and unary \verb|-| (negation).
|
||||
If the operands are numbers, or strings that can be converted to
|
||||
numbers, according to the rules given in Section~\ref{coercion},
|
||||
then all operations except exponentiation have the usual meaning.
|
||||
Otherwise, a tag method is called \see{tag-method}.
|
||||
Otherwise, an appropriate tag method is called \see{tag-method}.
|
||||
An exponentiation always calls a tag method.
|
||||
The standard mathematical library redefines this method for numbers,
|
||||
giving the expected meaning to \Index{exponentiation}
|
||||
@ -535,7 +549,7 @@ Equality first compares the types of its operands.
|
||||
If they are different, then the result is \nil.
|
||||
Otherwise, their values are compared.
|
||||
Numbers and strings are compared in the usual way.
|
||||
Tables, userdatas and functions are compared by reference,
|
||||
Tables, userdata and functions are compared by reference,
|
||||
that is, two tables are considered equal only if they are the same table.
|
||||
The operator \verb|~=| is exactly the negation of equality (\verb|==|).
|
||||
Note that the conversion rules of Section~\ref{coercion}
|
||||
@ -560,10 +574,10 @@ The \Index{logical operators} are:
|
||||
and or not
|
||||
\end{verbatim}
|
||||
The operator \verb|and| returns \nil\ if its first argument is \nil;
|
||||
otherwise it returns its second argument.
|
||||
otherwise, it returns its second argument.
|
||||
The operator \verb|or| returns its first argument
|
||||
if it is different from \nil;
|
||||
otherwise it returns its second argument.
|
||||
otherwise, it returns its second argument.
|
||||
Both \verb|and| and \verb|or| use \Index{short-cut evaluation},
|
||||
that is,
|
||||
the second operand is evaluated only when necessary.
|
||||
@ -573,7 +587,7 @@ Lua offers a string \Index{concatenation} operator,
|
||||
denoted by ``\IndexVerb{..}''.
|
||||
If operands are strings or numbers, then they are converted to
|
||||
strings according to the rules in Section~\ref{coercion}.
|
||||
Otherwise, the tag method ``concat'' is called \see{tag-method}.
|
||||
Otherwise, the ``concat'' tag method is called \see{tag-method}.
|
||||
|
||||
\subsubsection{Precedence}
|
||||
\Index{Operator precedence} follows the table below,
|
||||
@ -615,7 +629,7 @@ For example:
|
||||
\begin{verbatim}
|
||||
a = {"v1", "v2", 34}
|
||||
\end{verbatim}
|
||||
is essentialy equivalent to:
|
||||
is essentially equivalent to:
|
||||
\begin{verbatim}
|
||||
temp = {}
|
||||
temp[1] = "v1"
|
||||
@ -633,7 +647,7 @@ For example:
|
||||
\begin{verbatim}
|
||||
a = {[f(k)] = g(y), x = 1, y = 3, [0] = b+c}
|
||||
\end{verbatim}
|
||||
is essentialy equivalent to:
|
||||
is essentially equivalent to:
|
||||
\begin{verbatim}
|
||||
temp = {}
|
||||
temp[f(k)] = g(y)
|
||||
@ -642,22 +656,19 @@ is essentialy equivalent to:
|
||||
temp[0] = b+c
|
||||
a = temp
|
||||
\end{verbatim}
|
||||
Notice that an expression like \verb|{x = 1, y = 4}| is
|
||||
in fact a syntactic sugar for
|
||||
\begin{verbatim}
|
||||
{["x"] = 1, ["y"] = 4}
|
||||
\end{verbatim}
|
||||
An expression like \verb|{x = 1, y = 4}| is
|
||||
in fact syntactic sugar for \verb|{["x"] = 1, ["y"] = 4}|.
|
||||
|
||||
\subsubsection{Function Calls} \label{functioncall}
|
||||
A \Index{function call} has the following syntax:
|
||||
\begin{Produc}
|
||||
\produc{functioncall}{var realParams}
|
||||
\end{Produc}%
|
||||
Here, \verb|var| can be any variable (global, local, indexed, etc).
|
||||
Here, \M{var} can be any variable (global, local, indexed, etc).
|
||||
If its value has type {\em function\/},
|
||||
then this function is called.
|
||||
Otherwise, the ``function'' tag method is called,
|
||||
having as first parameter the value of \verb|var|,
|
||||
having as first parameter the value of \M{var},
|
||||
and then the original call parameters.
|
||||
|
||||
The form:
|
||||
@ -686,18 +697,18 @@ Because a function can return any number of results
|
||||
\see{return},
|
||||
the number of results must be adjusted before used.
|
||||
If the function is called as a statement \see{funcstat},
|
||||
its return list is adjusted to 0,
|
||||
then its return list is adjusted to~0,
|
||||
thus discarding all returned values.
|
||||
If the function is called in a place that needs a single value
|
||||
(syntactically denoted by the non-terminal \verb|exp1|),
|
||||
then its return list is adjusted to 1,
|
||||
(syntactically denoted by the non-terminal \M{exp1}),
|
||||
then its return list is adjusted to~1,
|
||||
thus discarding all returned values but the first one.
|
||||
If the function is called in a place that can hold many values
|
||||
(syntactically denoted by the non-terminal \verb|exp|),
|
||||
(syntactically denoted by the non-terminal \M{exp}),
|
||||
then no adjustment is made.
|
||||
|
||||
|
||||
\subsection{\Index{Function Definitions}}
|
||||
\subsection{\Index{Function Definitions}} \label{func-def}
|
||||
|
||||
Functions in Lua can be defined anywhere in the global level of a chunk.
|
||||
The syntax for function definition is:
|
||||
@ -731,7 +742,7 @@ instead, it collects any extra arguments in an implicit parameter,
|
||||
called \Def{arg}.
|
||||
This parameter is always initialized as a table,
|
||||
with a field \verb|n| with the number of extra arguments,
|
||||
and the extra arguments at positions 1, 2, \ldots.
|
||||
and the extra arguments at positions 1, 2, \ldots
|
||||
|
||||
As an example, suppose definitions like:
|
||||
\begin{verbatim}
|
||||
@ -783,14 +794,14 @@ previously initialized with a table value.
|
||||
|
||||
Lua provides a powerful mechanism to extend its semantics,
|
||||
called \Def{Tag Methods}.
|
||||
A tag method (TM) is a programmer defined function
|
||||
that can be called in many key points of the evaluation of a program,
|
||||
A tag method (TM) is a programmer-defined function
|
||||
that can be called at many key points of the evaluation of a program,
|
||||
allowing a programmer to change the standard Lua behavior at these points.
|
||||
Each of these points is called an \Def{event}.
|
||||
|
||||
The tag method called for any specific event is selected
|
||||
accordingly with the tag~\see{TypesSec} of the values involved
|
||||
in the event.
|
||||
according to the tag of the values involved
|
||||
in the event \see{TypesSec}.
|
||||
The function \IndexVerb{settagmethod} changes the tag method
|
||||
associated with a given pair $<tag, event>$.
|
||||
Its first parameter is the tag, the second the event name
|
||||
@ -810,7 +821,7 @@ The function not only shows when a tag method is called,
|
||||
but also its arguments, its results and the default behavior.
|
||||
Please notice that the code shown here is only illustrative;
|
||||
the real behavior is hard coded in the interpreter,
|
||||
and it is much more eficient than this simulation.
|
||||
and it is much more efficient than this simulation.
|
||||
All functions used in these descriptions
|
||||
(\verb|rawgetglobal|, \verb|tonumber|, \verb|call|, etc)
|
||||
are described in \See{predefined}.
|
||||
@ -822,10 +833,10 @@ called when a \verb|+| operation is applied to non numerical operands.
|
||||
|
||||
The function \verb|getbinmethod| defines how Lua chooses a tag method
|
||||
for a binary operation.
|
||||
First Lua trys the first operand.
|
||||
First Lua tries the first operand.
|
||||
If its tag does not define a tag method for the operation,
|
||||
Lua trys the second operand.
|
||||
If it also fails, it gets a tag method from tag 0:
|
||||
then Lua tries the second operand.
|
||||
If it also fails, then it gets a tag method from tag~0:
|
||||
\begin{verbatim}
|
||||
function getbinmethod (op1, op2, event)
|
||||
return gettagmethod(tag(op1), event) or
|
||||
@ -853,18 +864,18 @@ If it also fails, it gets a tag method from tag 0:
|
||||
|
||||
\item[``sub'':]\index{sub event}
|
||||
called when a \verb|-| operation is applied to non numerical operands.
|
||||
Behavior is similar to \verb|"add"| event.
|
||||
Behavior similar to \verb|"add"| event.
|
||||
|
||||
\item[``mul'':]\index{mul event}
|
||||
called when a \verb|*| operation is applied to non numerical operands.
|
||||
Behavior is similar to \verb|"add"| event.
|
||||
Behavior similar to \verb|"add"| event.
|
||||
|
||||
\item[``div'':]\index{div event}
|
||||
called when a \verb|/| operation is applied to non numerical operands.
|
||||
Behavior is similar to \verb|"add"| event.
|
||||
Behavior similar to \verb|"add"| event.
|
||||
|
||||
\item[``pow'':]\index{pow event}
|
||||
called whenenver a \verb|^| operation is applied.
|
||||
called when a \verb|^| operation is applied.
|
||||
\begin{verbatim}
|
||||
function pow_event (op1, op2)
|
||||
local tm = getbinmethod(op1, op2, "pow")
|
||||
@ -924,17 +935,17 @@ or non string operands.
|
||||
\item[``gt'':]\index{gt event}
|
||||
called when a \verb|>| operation is applied to non numerical
|
||||
or non string operands.
|
||||
Behavior is similar to \verb|"lt"| event.
|
||||
Behavior similar to \verb|"lt"| event.
|
||||
|
||||
\item[``le'':]\index{le event}
|
||||
called when a \verb|<=| operation is applied to non numerical
|
||||
or non string operands.
|
||||
Behavior is similar to \verb|"lt"| event.
|
||||
Behavior similar to \verb|"lt"| event.
|
||||
|
||||
\item[``ge'':]\index{ge event}
|
||||
called when a \verb|>=| operation is applied to non numerical
|
||||
or non string operands.
|
||||
Behavior is similar to \verb|"lt"| event.
|
||||
Behavior similar to \verb|"lt"| event.
|
||||
|
||||
\item[``concat'':]\index{concatenation event}
|
||||
called when a concatenation is applied to non string operands.
|
||||
@ -1011,8 +1022,7 @@ called whenever Lua accesses an indexed variable.
|
||||
\end{verbatim}
|
||||
|
||||
\item[``settable'':]\index{settable event}
|
||||
called whenever Lua assigns to an indexed variable.
|
||||
in a table.
|
||||
called when Lua assigns to an indexed variable.
|
||||
\begin{verbatim}
|
||||
function settable_event (table, index, value)
|
||||
local tm = gettagmethod(tag(table), "settable")
|
||||
@ -1062,8 +1072,8 @@ Lua does the equivalent of the following function:
|
||||
end
|
||||
end
|
||||
\end{verbatim}
|
||||
Moreover, at the end of a garbage collection cicle,
|
||||
Lua does the equivalent to the call \verb|gc_event(nil)|.
|
||||
Moreover, at the end of a garbage collection cycle,
|
||||
Lua does the equivalent of the call \verb|gc_event(nil)|.
|
||||
|
||||
\end{description}
|
||||
|
||||
@ -1086,14 +1096,15 @@ using the debug facilities \see{debugI},
|
||||
in order to print some extra information,
|
||||
like the call stack.
|
||||
To provide more information about errors,
|
||||
Lua programs can include the compilation pragma \verb|$debug|.
|
||||
Lua programs should include the compilation pragma \verb|$debug|.
|
||||
\index{debug pragma}\label{pragma}
|
||||
When an error occurs in a program compiled with this option,
|
||||
the error routine is able to print the number of the lines where the calls
|
||||
(and the error) were made.
|
||||
If needed, it is possible to change the error method with the
|
||||
function \verb|seterrormethod|,
|
||||
which gets the new error handler as its only parameter.
|
||||
which gets the new error handler as its only parameter
|
||||
\see{pdf-seterrormethod}.
|
||||
|
||||
Lua code can explicitly generate an error by calling the built-in
|
||||
function \verb|error| \see{pdf-error}.
|
||||
@ -1103,7 +1114,7 @@ function \verb|error| \see{pdf-error}.
|
||||
|
||||
This section describes the API for Lua, that is,
|
||||
the set of C functions available to the host program to communicate
|
||||
with the library.
|
||||
with the Lua library.
|
||||
The API functions can be classified in the following categories:
|
||||
\begin{enumerate}
|
||||
\item exchanging values between C and Lua;
|
||||
@ -1123,7 +1134,7 @@ all values passed between Lua and C have type
|
||||
which works like an abstract type in C that can hold any Lua value.
|
||||
Values of type \verb|lua_Object| have no meaning outside Lua;
|
||||
for instance,
|
||||
the comparisson of two \verb|lua_Object's| is undefined.
|
||||
the comparison of two \verb|lua_Object's| is undefined.
|
||||
|
||||
To check the type of a \verb|lua_Object|,
|
||||
the following functions are available:
|
||||
@ -1163,17 +1174,19 @@ char *lua_getstring (lua_Object object);
|
||||
lua_CFunction lua_getcfunction (lua_Object object);
|
||||
void *lua_getuserdata (lua_Object object);
|
||||
\end{verbatim}
|
||||
|
||||
\verb|lua_getnumber| converts a \verb|lua_Object| to a floating-point number.
|
||||
This \verb|lua_Object| must be a number or a string convertible to number
|
||||
\see{coercion}; otherwise, the function returns 0.
|
||||
\see{coercion}; otherwise, the function returns~0.
|
||||
|
||||
\verb|lua_getstring| converts a \verb|lua_Object| to a string (\verb|char*|).
|
||||
This \verb|lua_Object| must be a string or a number;
|
||||
otherwise, the function returns 0 (the \verb|NULL| pointer).
|
||||
otherwise, the function returns~0 (the \verb|NULL| pointer).
|
||||
This function does not create a new string,
|
||||
but returns a pointer to a string inside the Lua environment.
|
||||
Because Lua has garbage collection,
|
||||
there is no guarantee that such pointer will be valid after the block ends.
|
||||
there is no guarantee that such pointer will be valid after the block ends
|
||||
(see below).
|
||||
|
||||
\verb|lua_getcfunction| converts a \verb|lua_Object| to a C function.
|
||||
This \verb|lua_Object| must have type {\em CFunction\/};
|
||||
@ -1193,18 +1206,18 @@ It is good programming practice to convert Lua objects to C values
|
||||
as soon as they are available,
|
||||
and never to store \verb|lua_Object|s in C global variables.
|
||||
|
||||
A garbage collection cicle can be forced by:
|
||||
A garbage collection cycle can be forced by:
|
||||
\Deffunc{lua_collectgarbage}
|
||||
\begin{verbatim}
|
||||
long lua_collectgarbage (long limit);
|
||||
\end{verbatim}
|
||||
This function returns the number of objects collected.
|
||||
The argument \verb|limit| makes the next cicle occur when that number
|
||||
of new objects have been created.
|
||||
If \verb|limit|=0, Lua uses an adaptative algorithm to set this limit.
|
||||
The argument \verb|limit| makes the next cycle occur only
|
||||
when that number of new objects have been created.
|
||||
If \verb|limit|=0, then Lua uses an adaptable heuristics to set this limit.
|
||||
|
||||
|
||||
All comunication between Lua and C is done through two
|
||||
All communication between Lua and C is done through two
|
||||
abstract data types, called \Def{lua2C} and \Def{C2lua}.
|
||||
The first one, as the name implies, is used to pass values
|
||||
from Lua to C: parameters when Lua calls C and results when C calls Lua.
|
||||
@ -1227,7 +1240,7 @@ Notice that the structure lua2C cannot be directly modified by C code.
|
||||
|
||||
The second structure, C2lua, is a stack.
|
||||
Pushing elements into this stack
|
||||
is done by using the following functions:
|
||||
is done with the following functions:
|
||||
\Deffunc{lua_pushnumber}\Deffunc{lua_pushstring}
|
||||
\Deffunc{lua_pushcfunction}\Deffunc{lua_pushusertag}
|
||||
\Deffunc{lua_pushnil}\Deffunc{lua_pushobject}
|
||||
@ -1263,7 +1276,7 @@ If this function is called with
|
||||
\verb|tag|=\verb|LUA_ANYTAG|\Deffunc{LUA_ANYTAG},
|
||||
then Lua will try to find any userdata with the given value,
|
||||
no matter its tag.
|
||||
If there is no userdata with that value, a new one is created,
|
||||
If there is no userdata with that value, then a new one is created,
|
||||
with tag=0.
|
||||
|
||||
Userdata can have different tags,
|
||||
@ -1283,8 +1296,8 @@ void lua_settag (int tag);
|
||||
\verb|tag| must be a value created with \verb|lua_newtag|.
|
||||
|
||||
When C code calls Lua repeatedly, as in a loop,
|
||||
objects returned by these calls accumulate,
|
||||
and may create a memory problem.
|
||||
objects returned by these calls can accumulate,
|
||||
and may cause a stack overflow.
|
||||
To avoid this,
|
||||
nested blocks can be defined with the functions:
|
||||
\begin{verbatim}
|
||||
@ -1297,7 +1310,7 @@ The use of explicit nested blocks is strongly encouraged.
|
||||
|
||||
\subsection{Executing Lua Code}
|
||||
A host program can execute Lua chunks written in a file or in a string
|
||||
using the following functions:
|
||||
using the following functions:%
|
||||
\Deffunc{lua_dofile}\Deffunc{lua_dostring}
|
||||
\begin{verbatim}
|
||||
int lua_dofile (char *filename);
|
||||
@ -1325,7 +1338,7 @@ one uses the function:
|
||||
\begin{verbatim}
|
||||
lua_Object lua_getglobal (char *varname);
|
||||
\end{verbatim}
|
||||
As in Lua, this function may call a tag method.
|
||||
As in Lua, this function may trigger a tag method.
|
||||
To read the real value of any global variable,
|
||||
without invoking any tag method,
|
||||
this function has a {\em raw\/} version:
|
||||
@ -1336,11 +1349,11 @@ lua_Object lua_rawgetglobal (char *varname);
|
||||
|
||||
To store a value previously pushed onto C2lua in a global variable,
|
||||
there is the function:
|
||||
\Deffunc{lua_storeglobal}
|
||||
\Deffunc{lua_setglobal}
|
||||
\begin{verbatim}
|
||||
void lua_setglobal (char *varname);
|
||||
\end{verbatim}
|
||||
As in Lua, this function may call a tag method.
|
||||
As in Lua, this function may trigger a tag method.
|
||||
To set the real value of any global variable,
|
||||
without invoking any tag method,
|
||||
this function has a {\em raw\/} version:
|
||||
@ -1357,7 +1370,7 @@ lua_Object lua_gettable (void);
|
||||
\end{verbatim}
|
||||
pops from the stack C2lua a table and an index,
|
||||
and returns the contents of the table at that index.
|
||||
As in Lua, this operation may call a tag method.
|
||||
As in Lua, this operation may trigger a tag method.
|
||||
To get the real value of any table index,
|
||||
without invoking any tag method,
|
||||
this function has a {\em raw\/} version:
|
||||
@ -1458,7 +1471,7 @@ the second is the event name \see{tag-method},
|
||||
and the third is a CFunction to be used as the new method.
|
||||
This function returns a \verb|lua_Object|,
|
||||
which is the old tag method value.
|
||||
To only get the current value of a tag method,
|
||||
To get just the current value of a tag method,
|
||||
there is the function
|
||||
\Deffunc{lua_gettagmethod}
|
||||
\begin{verbatim}
|
||||
@ -1471,7 +1484,7 @@ To register a C function to Lua,
|
||||
there is the following macro:
|
||||
\Deffunc{lua_register}
|
||||
\begin{verbatim}
|
||||
#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n))
|
||||
#define lua_register(n,f) (lua_pushcfunction(f), lua_setglobal(n))
|
||||
/* char *n; */
|
||||
/* lua_CFunction f; */
|
||||
\end{verbatim}
|
||||
@ -1505,7 +1518,7 @@ For some examples, see files \verb|strlib.c|,
|
||||
As noted in Section~\ref{LuacallC}, \verb|lua_Object|s are volatile.
|
||||
If the C code needs to keep a \verb|lua_Object|
|
||||
outside block boundaries,
|
||||
it must create a \Def{reference} to the object.
|
||||
then it must create a \Def{reference} to the object.
|
||||
The routines to manipulate references are the following:
|
||||
\Deffunc{lua_ref}\Deffunc{lua_getref}
|
||||
\Deffunc{lua_unref}
|
||||
@ -1537,7 +1550,7 @@ The set of \Index{predefined functions} in Lua is small but powerful.
|
||||
Most of them provide features that allow some degree of
|
||||
\Index{reflexivity} in the language.
|
||||
Some of these features cannot be simulated with the rest of the
|
||||
Language nor with the standard Lua API.
|
||||
language nor with the standard Lua API.
|
||||
Others are just convenient interfaces to common API functions.
|
||||
|
||||
The libraries, on the other hand, provide useful routines
|
||||
@ -1558,7 +1571,7 @@ declared in \verb|lualib.h|.
|
||||
|
||||
\subsection{Predefined Functions} \label{predefined}
|
||||
|
||||
\subsection*{\ff{\tt call (func, arg, [retmode])}}\Deffunc{call}
|
||||
\subsubsection*{\ff {\tt call (func, arg, [retmode])}}\Deffunc{call}
|
||||
This function calls function \verb|func| with
|
||||
the arguments given by the table \verb|arg|.
|
||||
The call is equivalent to
|
||||
@ -1566,34 +1579,35 @@ The call is equivalent to
|
||||
func(arg[1], arg[2], ..., arg[arg.n])
|
||||
\end{verbatim}
|
||||
If \verb|arg.n| is not defined,
|
||||
Lua gets the arguments from \verb|arg[1]| until the first nil value.
|
||||
then Lua stops getting arguments at the first nil value.
|
||||
|
||||
If \verb|retmode| is equal to \verb|"plain"| or is absent,
|
||||
If \verb|retmode| is absent,
|
||||
all results from \verb|func| are just returned by the call.
|
||||
If \verb|retmode| is equal to \verb|"pack"|,
|
||||
the results are {\em packed\/} in a single table.\index{packed results}
|
||||
That is, \verb|call| returns just one table.
|
||||
At index \verb|n| the table has the total number of results
|
||||
At index \verb|n|, the table has the total number of results
|
||||
from the call;
|
||||
the first result is at index 1, etc.
|
||||
|
||||
For instance, the following calls produce the following results:
|
||||
\begin{verbatim}
|
||||
a = call(sin, {5}) -- a = 0.0871557 = sin(5)
|
||||
a = call(max, {1,4,5; n=2}) -- a = 4 (only 1 and 4 are arguments)
|
||||
a = call(sin, {5}) --> a = 0.0871557 = sin(5)
|
||||
a = call(max, {1,4,5; n=2}) --> a = 4 (only 1 and 4 are arguments)
|
||||
t = {x=1}
|
||||
a = call(next, {t,nil;n=2}, "pack") -- a={"x", 1; n=2}
|
||||
a = call(next, {t,nil;n=2}, "pack") --> a={"x", 1; n=2}
|
||||
\end{verbatim}
|
||||
|
||||
\subsection*{\ff{\tt callgc ([nextgc])}}\Deffunc{callgc}
|
||||
Forces a garbage collection cicle.
|
||||
\subsubsection*{\ff {\tt collectgarbage ([limit])}}\Deffunc{collectgarbage}
|
||||
Forces a garbage collection cycle.
|
||||
Returns the number of objects collected.
|
||||
An optional argument, \verb|nextgc|, is a number that
|
||||
makes the next cicle occur when that number of new
|
||||
An optional argument, \verb|limit|, is a number that
|
||||
makes the next cycle occur when that number of new
|
||||
objects have been created.
|
||||
If absent, Lua uses an adaptative algorithm to set
|
||||
If absent, Lua uses an adaptable algorithm to set
|
||||
this limit.
|
||||
\verb|nextgc| is simply an interface to \verb|lua_collectgarbage|.
|
||||
\verb|collectgarbage| is equivalent to
|
||||
the API function \verb|lua_collectgarbage|.
|
||||
|
||||
\subsubsection*{\ff {\tt dofile (filename)}}\Deffunc{dofile}
|
||||
This function receives a file name,
|
||||
@ -1601,22 +1615,23 @@ opens it, and executes its contents as a Lua chunk,
|
||||
or as pre-compiled chunks.
|
||||
When called without arguments,
|
||||
it executes the contents of the standard input (\verb|stdin|).
|
||||
If there is any error executing the file, it returns \nil.
|
||||
If there is any error executing the file,
|
||||
then \verb|dofile| returns \nil.
|
||||
Otherwise, it returns the values returned by the chunk,
|
||||
or a non \nil\ value if the chunk returns no values.
|
||||
It issues an error when called with a non string argument.
|
||||
\verb|dofile| is simply an interface to \verb|lua_dofile|.
|
||||
\verb|dofile| is equivalent to the API function \verb|lua_dofile|.
|
||||
|
||||
\subsubsection*{\ff {\tt dostring (string)}}\Deffunc{dostring}
|
||||
This function executes a given string as a Lua chunk.
|
||||
If there is any error executing the string, it returns \nil.
|
||||
Otherwise, it returns the values returned by the chunk,
|
||||
or a non \nil\ value if the chunk returns no values.
|
||||
\verb|dostring| is simply an interface to \verb|lua_dostring|.
|
||||
\verb|dostring| is equivalent to the API function \verb|lua_dostring|.
|
||||
|
||||
\subsubsection*{\ff {\tt newtag ()}}\Deffunc{newtag}\label{pdf-newtag}
|
||||
Returns a new tag.
|
||||
\verb|newtag| is simply an interface to \verb|lua_newtag|.
|
||||
\verb|newtag| is equivalent to the API function \verb|lua_newtag|.
|
||||
|
||||
\subsubsection*{\ff {\tt next (table, index)}}\Deffunc{next}
|
||||
This function allows a program to traverse all fields of a table.
|
||||
@ -1635,7 +1650,7 @@ semantically, there is no difference between a
|
||||
field not present in a table or a field with value \nil.
|
||||
Therefore, the function only considers fields with non \nil\ values.
|
||||
The order in which the indices are enumerated is not specified,
|
||||
{\em even for numeric indices}.
|
||||
{\em not even for numeric indices}.
|
||||
If the table is modified in any way during a traversal,
|
||||
the semantics of \verb|next| is undefined.
|
||||
|
||||
@ -1674,7 +1689,7 @@ If the argument is already a number or a string convertible
|
||||
to a number \see{coercion}, then it returns that number;
|
||||
otherwise, it returns \nil.
|
||||
|
||||
\subsubsection*{\ff{\tt type (v)}}\Deffunc{type}
|
||||
\subsubsection*{\ff {\tt type (v)}}\Deffunc{type}\label{pdf-type}
|
||||
This function allows Lua to test the type of a value.
|
||||
It receives one argument, and returns its type, coded as a string.
|
||||
The possible results of this function are
|
||||
@ -1684,18 +1699,19 @@ The possible results of this function are
|
||||
\verb|"table"|,
|
||||
\verb|"function"|,
|
||||
and \verb|"userdata"|.
|
||||
|
||||
\verb|type| is simply an interface to \verb|lua_type|.
|
||||
\verb|type| is equivalent to the API function \verb|lua_type|.
|
||||
|
||||
\subsubsection*{\ff {\tt tag (v)}}\Deffunc{tag}
|
||||
This function allows Lua to test the tag of a value \see{TypesSec}.
|
||||
It receives one argument, and returns its tag (a number).
|
||||
\verb|tag| is equivalent to the API function \verb|lua_tag|.
|
||||
|
||||
\subsubsection*{\ff {\tt settag (o, tag)}}\Deffunc{settag}
|
||||
This function sets the tag of a given object \see{TypesSec}.
|
||||
The object \verb|o| must be a userdata or a table.
|
||||
\verb|tag| must be a value created with \verb|newtag|
|
||||
\see{pdf-newtag}.
|
||||
\verb|settag| is equivalent to the API function \verb|lua_settag|.
|
||||
|
||||
\subsubsection*{\ff {\tt assert (v)}}\Deffunc{assert}
|
||||
This function issues an {\em ``assertion failed!''} error
|
||||
@ -1706,7 +1722,7 @@ This function issues an error message and terminates
|
||||
the last called function from the library
|
||||
(\verb|lua_dofile|, \verb|lua_dostring|, or \verb|lua_callfunction|).
|
||||
It never returns.
|
||||
\verb|error| is simply an interface to \verb|lua_error|.
|
||||
\verb|error| is equivalent to the API function \verb|lua_error|.
|
||||
|
||||
\subsubsection*{\ff {\tt rawgettable (table, index)}}\Deffunc{rawgettable}
|
||||
Gets the real value of \verb|table[index]|,
|
||||
@ -1725,7 +1741,7 @@ and \verb|value| is any Lua value.
|
||||
This function assigns the given value to a global variable.
|
||||
The string \verb|name| does not need to be a syntactically valid variable name.
|
||||
Therefore, this function can set global variables with strange names like
|
||||
\verb|`m v 1'| or \verb|34|.
|
||||
\verb|"m v 1"| or \verb|34|.
|
||||
It returns the value of its second argument.
|
||||
|
||||
\subsubsection*{\ff {\tt setglobal (name, value)}}\Deffunc{setglobal}
|
||||
@ -1744,10 +1760,11 @@ or calls a tag method.
|
||||
Its full semantics is explained in \See{tag-method}.
|
||||
|
||||
\subsubsection*{\ff {\tt seterrormethod (newmethod)}}
|
||||
\label{pdf-seterrormethod}
|
||||
Sets the error handler \see{error}.
|
||||
\verb|newmethod| must be a function or \nil,
|
||||
in which case the error handler does nothing.
|
||||
Returns the old handler.
|
||||
Returns the old error handler.
|
||||
|
||||
\subsubsection*{\ff {\tt settagmethod (tag, event, newmethod)}}
|
||||
\Deffunc{settagmethod}
|
||||
@ -1765,30 +1782,31 @@ for a given pair $<tag, event>$.
|
||||
\subsection{String Manipulation}
|
||||
This library provides generic functions for string manipulation,
|
||||
such as finding and extracting substrings and pattern matching.
|
||||
When indexing a string, the first character is at position 1,
|
||||
not 0, as in C.
|
||||
When indexing a string, the first character is at position~1,
|
||||
not~0, as in C.
|
||||
|
||||
\subsubsection*{\ff {\tt strfind (str, pattern [, init [, plain]])}}
|
||||
\Deffunc{strfind}
|
||||
This function looks for the first {\em match\/} of
|
||||
\verb|pattern| in \verb|str|.
|
||||
If it finds one, then it returns the indices on \verb|str|
|
||||
where this occurence starts and ends;
|
||||
where this occurrence starts and ends;
|
||||
otherwise, it returns \nil.
|
||||
If the pattern specifies captures,
|
||||
the captured strings are returned as extra results.
|
||||
A third optional numerical argument specifies where to start the search;
|
||||
its default value is 1.
|
||||
A value of 1 as a forth optional argument
|
||||
A value of 1 as a fourth optional argument
|
||||
turns off the pattern matching facilities,
|
||||
so the function does a plain ``find substring'' operation.
|
||||
so the function does a plain ``find substring'' operation,
|
||||
with no characters in \verb|pattern| being considered ``magic''.
|
||||
|
||||
\subsubsection*{\ff {\tt strlen (s)}}\Deffunc{strlen}
|
||||
Receives a string and returns its length.
|
||||
|
||||
\subsubsection*{\ff {\tt strsub (s, i [, j])}}\Deffunc{strsub}
|
||||
Returns another string, which is a substring of \verb|s|,
|
||||
starting at \verb|i| and runing until \verb|j|.
|
||||
starting at \verb|i| and running until \verb|j|.
|
||||
If \verb|i| or \verb|j| are negative,
|
||||
they are replaced by the length of the string minus their
|
||||
absolute value plus 1.
|
||||
@ -1855,7 +1873,8 @@ the appropriate format string.
|
||||
For example, \verb|"%*g"| can be simulated with
|
||||
\verb|"%"..width.."g"|.
|
||||
|
||||
\subsubsection*{\ff{\tt gsub (s, pat, repl [, n])}}\Deffunc{gsub}
|
||||
\subsubsection*{\ff {\tt gsub (s, pat, repl [, table] [, n])}}
|
||||
\Deffunc{gsub}
|
||||
Returns a copy of \verb|s|,
|
||||
where all occurrences of the pattern \verb|pat| have been
|
||||
replaced by a replacement string specified by \verb|repl|.
|
||||
@ -1868,38 +1887,53 @@ with \verb|n| between 1 and 9
|
||||
stands for the value of the n-th captured substring.
|
||||
|
||||
If \verb|repl| is a function, then this function is called every time a
|
||||
match occurs, with all captured substrings as parameters
|
||||
(see below).
|
||||
match occurs, with the following arguments:
|
||||
If \verb|table| is present, it is the first argument;
|
||||
then all captured substrings, in order (see below);
|
||||
finally, the last argument is a match counter
|
||||
(1 for the first call).
|
||||
If the value returned by this function is a string,
|
||||
then it is used as the replacement string;
|
||||
otherwise, the replacement string is the empty string.
|
||||
|
||||
An optional parameter \verb|n| limits
|
||||
A last optional parameter \verb|n| limits
|
||||
the maximum number of substitutions to occur.
|
||||
For instance, when \verb|n| is 1 only the first occurrence of
|
||||
\verb|pat| is replaced.
|
||||
|
||||
As an example, in the following expression each occurrence of the form
|
||||
\verb|$name| calls the function \verb|getenv|,
|
||||
passing \verb|name| as argument
|
||||
(because only this part of the pattern is captured).
|
||||
The value returned by \verb|getenv| will replace the pattern.
|
||||
Therefore, the whole expression:
|
||||
See some examples below:
|
||||
\begin{verbatim}
|
||||
gsub("home = $HOME, user = $USER", "$(%w%w*)", getenv)
|
||||
\end{verbatim}
|
||||
returns a string like:
|
||||
\begin{verbatim}
|
||||
home = /home/roberto, user = roberto
|
||||
x = gsub("hello world", "(%w%w*)", "%1 %1", 1)
|
||||
--> x="hello hello world"
|
||||
|
||||
x = gsub("home = $HOME, user = $USER", "$(%w%w*)", getenv)
|
||||
--> x="home = /home/roberto, user = roberto" (for instance)
|
||||
|
||||
x = gsub("4+5 = $return 4+5$", "$(.-)%$", dostring)
|
||||
--> x="4+5 = 9"
|
||||
|
||||
t = {name="lua", version="3.0"}
|
||||
x = gsub("$name - $version", "$(%w%w*)", rawgettable, t)
|
||||
--> x="lua - 3.0"
|
||||
|
||||
t = {"apple", "orange", "lime"}
|
||||
x = gsub("x and x and x", "x", rawgettable, t)
|
||||
--> x="apple and orange and lime"
|
||||
|
||||
function f(t,v,i) t[i]=v end
|
||||
t = {}
|
||||
gsub("first second word", "(%w%w*)", f, t)
|
||||
--> t={"first", "second", "word"}
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\subsubsection*{Patterns} \label{pm}
|
||||
|
||||
\paragraph{Character Class:}
|
||||
a \Def{character class} is used to represent a set of characters.
|
||||
The following combinations are allowed in describing a character class:
|
||||
\begin{description}
|
||||
\item[{\em x}] (where {\em x} is any character not in the list \verb|()%.[*?|)
|
||||
\item[{\em x}] (where {\em x} is any character not in the list \verb|()%.[*-?|)
|
||||
--- represents the character {\em x} itself.
|
||||
\item[{\tt .}] --- represents all characters.
|
||||
\item[{\tt \%a}] --- represents all letters.
|
||||
@ -1916,7 +1950,7 @@ The following combinations are allowed in describing a character class:
|
||||
\item[{\tt \%W}] --- represents all non alphanumeric characters.
|
||||
\item[{\tt \%\M{x}}] (where \M{x} is any non alphanumeric character) ---
|
||||
represents the character \M{x}.
|
||||
This is the standard way to escape the magic characters \verb|()%.[*?|.
|
||||
This is the standard way to escape the magic characters \verb|()%.[*-?|.
|
||||
\item[{\tt [char-set]}] ---
|
||||
Represents the class which is the union of all
|
||||
characters in char-set.
|
||||
@ -1943,12 +1977,12 @@ which matches any single character in the class;
|
||||
\item
|
||||
a single character class followed by \verb|*|,
|
||||
which matches 0 or more repetitions of characters in the class.
|
||||
These repetition itens will always match the longest possible sequence.
|
||||
These repetition items will always match the longest possible sequence.
|
||||
\item
|
||||
a single character class followed by \verb|-|,
|
||||
which also matches 0 or more repetitions of characters in the class.
|
||||
Unlike \verb|*|,
|
||||
these repetition itens will always match the shortest possible sequence.
|
||||
these repetition items will always match the shortest possible sequence.
|
||||
\item
|
||||
a single character class followed by \verb|?|,
|
||||
which matches 0 or 1 occurrence of a character in the class;
|
||||
@ -1958,12 +1992,12 @@ such item matches a sub-string equal to the n-th captured string
|
||||
(see below);
|
||||
\item
|
||||
{\tt \%b\M{xy}}, where \M{x} and \M{y} are two distinct characters;
|
||||
such item mathes strings that start with \M{x}, end with \M{y},
|
||||
such item matches strings that start with \M{x}, end with \M{y},
|
||||
and where the \M{x} and \M{y} are {\em balanced}.
|
||||
That means that, if one reads the string from left to write,
|
||||
counting plus 1 for an \M{x} and minus 1 for a \M{y},
|
||||
the ending \M{y} is the first where the count reaches 0.
|
||||
For instance, the item \verb|%()| matches expressions with
|
||||
For instance, the item \verb|%b()| matches expressions with
|
||||
balanced parentheses.
|
||||
\end{itemize}
|
||||
|
||||
@ -2021,7 +2055,7 @@ range \M{[0,1)}.
|
||||
|
||||
\subsection{I/O Facilities} \label{libio}
|
||||
|
||||
All input and outpu operations in Lua are done over two {\em current\/} files:
|
||||
All input and output operations in Lua are done over two {\em current\/} files:
|
||||
one for reading and one for writing.
|
||||
Initially, the current input file is \verb|stdin|,
|
||||
and the current output file is \verb|stdout|.
|
||||
@ -2039,7 +2073,7 @@ sets it as the {\em current\/} input file,
|
||||
and returns a {\em handle\/} to the file
|
||||
(this handle is a userdata containing the file stream \verb|FILE*|).
|
||||
It does not close the current input file.
|
||||
When called with a file handle, returned by a previous call,
|
||||
When called with a file handle returned by a previous call,
|
||||
it restores the file as the current input.
|
||||
When called without parameters,
|
||||
it closes the current input file,
|
||||
@ -2068,8 +2102,8 @@ and returns a {\em handle\/} to the file
|
||||
(this handle is a user data containing the file stream \verb|FILE*|).
|
||||
It does not close the current output file.
|
||||
Notice that, if the file already exists,
|
||||
it will be {\em completely erased\/} with this operation.
|
||||
When called with a file handle, returned by a previous call,
|
||||
then it will be {\em completely erased\/} with this operation.
|
||||
When called with a file handle returned by a previous call,
|
||||
it restores the file as the current output.
|
||||
When called without parameters,
|
||||
this function closes the current output file,
|
||||
@ -2119,6 +2153,7 @@ plus a string describing the error.
|
||||
|
||||
This function returns a string with a file name that can safely
|
||||
be used for a temporary file.
|
||||
The file must be explicitly removed when no longer needed.
|
||||
|
||||
\subsubsection*{\ff {\tt read ([readpattern])}}\Deffunc{read}
|
||||
|
||||
@ -2301,7 +2336,6 @@ or if the activation record has no debug information,
|
||||
Formal parameters are the first local variables.
|
||||
|
||||
The function \verb|lua_setlocal| sets the local variable
|
||||
%%LHF: please, lua_setglobal!
|
||||
\verb|local_number| to the value previously pushed on the stack
|
||||
\see{valuesCLua}.
|
||||
If the function succeeds, then it returns 1.
|
||||
|
Loading…
x
Reference in New Issue
Block a user