annotate website/src/manual.html.luan @ 1938:bd00b36380d9 default tip

ai options
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 16 May 2025 17:20:29 -0600
parents 31f006c64782
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Luan = require "luan:Luan.luan"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3 local pairs = Luan.pairs or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
4 local String = require "luan:String.luan"
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
5 local replace = String.replace or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
6 local Table = require "luan:Table.luan"
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
7 local concat = Table.concat or error()
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local Io = require "luan:Io.luan"
1938
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
9 local Site_translator = require "luan:ai/Site_translator.luan"
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
10 local get_lang = Site_translator.get_lang or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
11 local text_writer = Site_translator.text_writer or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
12 local languages = Site_translator.languages or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
13 local set_translated = Site_translator.set_translated or error()
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local Shared = require "site:/lib/Shared.luan"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 local head = Shared.head or error()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 local docs_header = Shared.docs_header or error()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 local show_toc = Shared.show_toc or error()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 local show_content = Shared.show_content or error()
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
19 local show_content_info = Shared.show_content_info or error()
1938
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
20 local Ai = require "luan:ai/Ai.luan"
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
21 local require_ai = Ai.require_ai or error()
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
22 local Translator = require_ai "Translator.luan"
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
23 local translate_html = Translator.translate_html or error()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
24 local Logging = require "luan:logging/Logging.luan"
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
25 local logger = Logging.logger "manual.html"
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 local content = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 intro = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 title = "Introduction"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 <p>
1827
50e570b598b2 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1818
diff changeset
34 Luan is a high level programming language based on <a href="https://www.lua.org/">Lua</a>. A great strength of Lua is its simplicity and Luan takes this even further, being even simpler than Lua. The goal is to provide a simple programming language for the casual programmer with as few concepts as possible so that one can quickly learn the language and then easily understand any code written in Luan.
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 Luan is implemented in Java and is tightly coupled with Java. So it makes a great scripting language for Java programmers.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 Unlike Lua which is meant to be embedded, Luan is meant to be a full scripting language. This done not by adding features to Luan, but rather by providing a complete set of libraries.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 basic = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 title = "Basic Concepts"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 This section describes the basic concepts of the language.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 subs = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 types = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 title = "Values and Types"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 Luan is a <em>dynamically typed language</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 This means that
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 variables do not have types; only values do.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 There are no type definitions in the language.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 All values carry their own type.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 All values in Luan are <em>first-class values</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 This means that all values can be stored in variables,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 passed as arguments to other functions, and returned as results.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 There are eight basic types in Luan:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77 <em>nil</em>, <em>boolean</em>, <em>number</em>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 <em>string</em>, <em>binary</em>, <em>function</em>, <em>java</em>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
79 and <em>table</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
80 <em>Nil</em> is the type of the value <b>nil</b>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 whose main property is to be different from any other value;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
82 it usually represents the absence of a useful value.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
83 <em>Nil</em> is implemented as the Java value <em>null</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
84 <em>Boolean</em> is the type of the values <b>false</b> and <b>true</b>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85 <em>Boolean</em> is implemented as the Java class <em>Boolean</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
86 <em>Number</em> represents both
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
87 integer numbers and real (floating-point) numbers.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
88 <em>Number</em> is implemented as the Java class <em>Number</em>. Any Java subclass of <em>Number</em> is allowed and this is invisible to the Luan user. Operations on numbers follow the same rules of
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
89 the underlying Java implementation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90 <em>String</em> is implemented as the Java class <em>String</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
91 <em>Binary</em> is implemented as the Java type <em>byte[]</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
92 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
94 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
95 Luan can call (and manipulate) functions written in Luan and
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
96 functions written in Java (see <a href="#fn_calls">Function Calls</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
97 Both are represented by the type <em>function</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
98 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
99
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
100 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
101 The type <em>java</em> is provided to allow arbitrary Java objects to
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
102 be stored in Luan variables.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
103 A <em>java</em> value is a Java object that isn't one of the standard Luan types.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
104 Java values have no predefined operations in Luan,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
105 except assignment and identity test.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
106 Java values are useful when Java access is enabled in Luan.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
107 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
108
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
109 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
110 The type <em>table</em> implements associative arrays,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
111 that is, arrays that can be indexed not only with numbers,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
112 but with any Luan value except <b>nil</b>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
113 Tables can be <em>heterogeneous</em>;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
114 that is, they can contain values of all types (except <b>nil</b>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
115 Any key with value <b>nil</b> is not considered part of the table.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
116 Conversely, any key that is not part of a table has
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
117 an associated value <b>nil</b>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
118 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
119
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
120 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
121 Tables are the sole data-structuring mechanism in Luan;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
122 they can be used to represent ordinary arrays, sequences,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
123 symbol tables, sets, records, graphs, trees, etc.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
124 To represent records, Luan uses the field name as an index.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
125 The language supports this representation by
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
126 providing <code>a.name</code> as syntactic sugar for <code>a["name"]</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
127 There are several convenient ways to create tables in Luan
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
128 (see <a href="#constructors">Table Constructors</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
129 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
130
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
131 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
132 We use the term <em>sequence</em> to denote a table where
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
133 the set of all positive numeric keys is equal to {1..<em>n</em>}
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
134 for some non-negative integer <em>n</em>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
135 which is called the length of the sequence (see <a href="#length">The Length Operator</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
136 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
137
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
138 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
139 Like indices,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
140 the values of table fields can be of any type.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
141 In particular,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
142 because functions are first-class values,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
143 table fields can contain functions.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
144 Thus tables can also carry <em>methods</em> (see <a href="#fn_def">Function Definitions</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
145 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
146
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
147 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
148 The indexing of tables follows
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
149 the definition of raw equality in the language.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
150 The expressions <code>a[i]</code> and <code>a[j]</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
151 denote the same table element
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
152 if and only if <code>i</code> and <code>j</code> are raw equal
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
153 (that is, equal without metamethods).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
154 In particular, floats with integral values
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
155 are equal to their respective integers
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
156 (e.g., <code>1.0 == 1</code>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
157 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
158
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
159 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
160 Luan values are <em>objects</em>:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
161 variables do not actually <em>contain</em> values,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
162 only <em>references</em> to them.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
163 Assignment, parameter passing, and function returns
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
164 always manipulate references to values;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
165 these operations do not imply any kind of copy.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
166 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
167
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
168 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
169 The library function <a href="#Luan.type"><code>Luan.type</code></a> returns a string describing the type
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
170 of a given value.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
171 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
172 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
173 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
174 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
175 env = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
176 title = "Environments"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
177 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
178 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
179 <p>
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
180 The environment of a chunk starts with only one local variable: <code><a href="#require">require</a></code>. This function is used to load and access libraries and other modules. All other variables must be added to the environment using <a href="manual.html#local_stmt">local declarations</a>.
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
181 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
182
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
183 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
184 As will be discussed in <a href="#vars">Variables</a> and <a href=#assignment">Assignment</a>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
185 any reference to a free name
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
186 (that is, a name not bound to any declaration) <code>var</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
187 can be syntactically translated to <code>_ENV.var</code> if <code>_ENV</code> is defined.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
188 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
189 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
190 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
191 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
192 error = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
193 title = "Error Handling"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
194 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
195 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
196 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
197 Luan code can explicitly generate an error by calling the
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
198 <a href="#Luan.error"><code>error</code></a> function.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
199 If you need to catch errors in Luan,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
200 you can use the <a href="#try">Try Statement</code></a>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
201 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
202
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
203 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
204 Whenever there is an error,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
205 an <em>error table</em>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
206 is propagated with information about the error.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
207 See <a href="#Luan.new_error"><code>Luan.new_error</code></a>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
208 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
209 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
210 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
211 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
212 meta = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
213 title = "Metatables and Metamethods"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
214 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
215 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
216 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
217 Every table in Luan can have a <em>metatable</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
218 This <em>metatable</em> is an ordinary Luan table
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
219 that defines the behavior of the original value
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
220 under certain special operations.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
221 You can change several aspects of the behavior
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
222 of operations over a value by setting specific fields in its metatable.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
223 For instance, when a table is the operand of an addition,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
224 Luan checks for a function in the field "<code>__add</code>" of the table's metatable.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
225 If it finds one,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
226 Luan calls this function to perform the addition.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
227 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
228
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
229 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
230 The keys in a metatable are derived from the <em>event</em> names;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
231 the corresponding values are called <ii>metamethods</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
232 In the previous example, the event is <code>"add"</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
233 and the metamethod is the function that performs the addition.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
234 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
235
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
236 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
237 You can query the metatable of any table
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
238 using the <a href="#Luan.get_metatable"><code>get_metatable</code></a> function.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
239 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
240
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
241 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
242 You can replace the metatable of tables
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
243 using the <a href="#Luan.set_metatable"><code>set_metatable</code></a> function.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
244 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
245
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
246 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
247 A metatable controls how a table behaves in
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
248 arithmetic operations, bitwise operations,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
249 order comparisons, concatenation, length operation, calls, and indexing.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
250 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
251
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
252 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
253 A detailed list of events controlled by metatables is given next.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
254 Each operation is identified by its corresponding event name.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
255 The key for each event is a string with its name prefixed by
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
256 two underscores, '<code>__</code>';
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
257 for instance, the key for operation "add" is the
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
258 string "<code>__add</code>".
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
259 Note that queries for metamethods are always raw;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
260 the access to a metamethod does not invoke other metamethods.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
261 You can emulate how Luan queries a metamethod for an object <code>obj</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
262 with the following code:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
263 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
264
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
265 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
266 raw_get(get_metatable(obj) or {}, "__" .. event_name)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
267 </code>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
268
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
269 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
270 Here are the events:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
271 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
272
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
273 <ul>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
274
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
275 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
276 <b>"add": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
277 the <code>+</code> operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
278
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
279 If any operand for an addition is a table,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
280 Luan will try to call a metamethod.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
281 First, Luan will check the first operand (even if it is valid).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
282 If that operand does not define a metamethod for the "<code>__add</code>" event,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
283 then Luan will check the second operand.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
284 If Luan can find a metamethod,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
285 it calls the metamethod with the two operands as arguments,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
286 and the result of the call
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
287 (adjusted to one value)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
288 is the result of the operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
289 Otherwise,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
290 it raises an error.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
291 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
292
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
293 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
294 <b>"sub": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
295 the <code>-</code> operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
296 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
297 </li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
298
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
299 <li><p><b>"mul": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
300 the <code>*</code> operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
301 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
302 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
303
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
304 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
305 <b>"div": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
306 the <code>/</code> operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
307 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
308 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
309
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
310 <li><p>
1680
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
311 <b>"idiv": </b>
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
312 the <code>//</code> operation.
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
313 Behavior similar to the "add" operation.
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
314 </p></li>
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
315
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
316 <li><p>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
317 <b>"mod": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
318 the <code>%</code> operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
319 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
320 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
321
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
322 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
323 <b>"pow": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
324 the <code>^</code> (exponentiation) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
325 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
326 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
327
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
328 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
329 <b>"unm": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
330 the <code>-</code> (unary minus) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
331 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
332 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
333
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
334 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
335 <b>"concat": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
336 the <code>..</code> (concatenation) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
337 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
338 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
339
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
340 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
341 <b>"len": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
342 the <code>#</code> (length) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
343 If there is a metamethod,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
344 Luan calls it with the object as argument,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
345 and the result of the call
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
346 (always adjusted to one value)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
347 is the result of the operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
348 If there is no metamethod but the object is a table,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
349 then Luan uses the table length operation (see <a href="#length">The Length Operator</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
350 Otherwise, Luan raises an error.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
351 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
352
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
353 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
354 <b>"eq": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
355 the <code>==</code> (equal) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
356 Behavior similar to the "add" operation,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
357 except that Luan will try a metamethod only when the values
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
358 being compared are both tables
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
359 and they are not primitively equal.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
360 The result of the call is always converted to a boolean.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
361 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
362
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
363 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
364 <b>"lt": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
365 the <code>&lt;</code> (less than) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
366 Behavior similar to the "add" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
367 The result of the call is always converted to a boolean.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
368 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
369
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
370 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
371 <b>"le": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
372 the <code>&lt;=</code> (less equal) operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
373 Unlike other operations,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
374 The less-equal operation can use two different events.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
375 First, Luan looks for the "<code>__le</code>" metamethod in both operands,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
376 like in the "lt" operation.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
377 If it cannot find such a metamethod,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
378 then it will try the "<code>__lt</code>" event,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
379 assuming that <code>a &lt;= b</code> is equivalent to <code>not (b &lt; a)</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
380 As with the other comparison operators,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
381 the result is always a boolean.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
382 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
383
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
384 <li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
385 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
386 <b>"index": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
387 The indexing access <code>table[key]</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
388 This event happens
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
389 when <code>key</code> is not present in <code>table</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
390 The metamethod is looked up in <code>table</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
391 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
392
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
393 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
394 Despite the name,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
395 the metamethod for this event can be any type.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
396 If it is a function,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
397 it is called with <code>table</code> and <code>key</code> as arguments.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
398 Otherwise
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
399 the final result is the result of indexing this metamethod object with <code>key</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
400 (This indexing is regular, not raw,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
401 and therefore can trigger another metamethod if the metamethod object is a table.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
402 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
403 </li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
404
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
405 <li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
406 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
407 <b>"new_index": </b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
408 The indexing assignment <code>table[key] = value</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
409 Like the index event,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
410 this event happens when
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
411 when <code>key</code> is not present in <code>table</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
412 The metamethod is looked up in <code>table</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
413 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
414
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
415 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
416 Like with indexing,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
417 the metamethod for this event can be either a function or a table.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
418 If it is a function,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
419 it is called with <code>table</code>, <code>key</code>, and <code>value</code> as arguments.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
420 If it is a table,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
421 Luan does an indexing assignment to this table with the same key and value.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
422 (This assignment is regular, not raw,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
423 and therefore can trigger another metamethod.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
424 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
425
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
426 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
427 Whenever there is a "new_index" metamethod,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
428 Luan does not perform the primitive assignment.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
429 (If necessary,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
430 the metamethod itself can call <a href="#Luan.raw_set"><code>raw_set</code></a>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
431 to do the assignment.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
432 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
433 </li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
434
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
435 <li><p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
436 <b>"gc":</b>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
437 This is when a table is garbage collected. When the table's <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--">finalize</a> method is called by the Java garbage collector, if there is a "<code>__gc</code>" metamethod then it is called with the table as a parameter.
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
438 </p></li>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
439
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
440 </ul>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
441 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
442 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
443 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
444 gc = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
445 title = "Garbage Collection"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
446 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
447 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
448 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
449 Luan uses Java's garbage collection.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
450 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
451 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
452 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
453 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
454 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
455 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
456 lang = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
457 title = "The Language"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
458 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
459 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
460 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
461 This section describes the lexis, the syntax, and the semantics of Luan.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
462 In other words,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
463 this section describes
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
464 which tokens are valid,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
465 how they can be combined,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
466 and what their combinations mean.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
467 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
468
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
469 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
470 Language constructs will be explained using the usual extended BNF notation,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
471 in which
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
472 {<em>a</em>}&nbsp;means&nbsp;0 or more <em>a</em>'s, and
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
473 [<em>a</em>]&nbsp;means an optional <em>a</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
474 Non-terminals are shown like non-terminal,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
475 keywords are shown like <b>kword</b>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
476 and other terminal symbols are shown like &lsquo;<b>=</b>&rsquo;.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
477 The complete syntax of Luan can be found in <a href="#9">&sect;9</a>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
478 at the end of this manual.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
479 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
480 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
481 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
482 subs = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
483 lex = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
484 title = "Lexical Conventions"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
485 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
486 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
487 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
488 Luan ignores spaces and comments
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
489 between lexical elements (tokens),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
490 except as delimiters between names and keywords.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
491 Luan considers the end of a line to be the end of a statement. This catches errors and encourages readability. If you want to continue a statement on another line, you can use a backslash followed by a newline which will be treated as white space.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
492 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
493
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
494 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
495 <em>Names</em>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
496 (also called <em>identifiers</em>)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
497 in Luan can be any string of letters,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
498 digits, and underscores,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
499 not beginning with a digit.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
500 Identifiers are used to name variables, table fields, and labels.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
501 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
502
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
503 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
504 The following <em>keywords</em> are reserved
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
505 and cannot be used as names:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
506 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
507
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
508 <p list=keywords>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
509 <span>and</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
510 <span>break</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
511 <span>catch</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
512 <span>continue</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
513 <span>do</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
514 <span>else</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
515 <span>elseif</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
516 <span>end_do</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
517 <span>end_for</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
518 <span>end_function</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
519 <span>end_if</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
520 <span>end_try</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
521 <span>end_while</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
522 <span>false</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
523 <span>finally</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
524 <span>for</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
525 <span>function</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
526 <span>if</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
527 <span>in</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
528 <span>local</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
529 <span>nil</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
530 <span>not</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
531 <span>or</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
532 <span>repeat</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
533 <span>return</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
534 <span>then</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
535 <span>true</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
536 <span>try</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
537 <span>until</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
538 <span>while</span>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
539 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
540
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
541 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
542 Luan is a case-sensitive language:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
543 <code>and</code> is a reserved word, but <code>And</code> and <code>AND</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
544 are two different, valid names.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
545 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
546
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
547 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
548 The following strings denote other tokens:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
549 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
550
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
551 <p list=tokens>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
552 <span>+</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
553 <span>-</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
554 <span>*</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
555 <span>/</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
556 <span>//</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
557 <span>%</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
558 <span>^</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
559 <span>#</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
560 <span>&amp;</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
561 <span>~</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
562 <span>|</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
563 <span>==</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
564 <span>~=</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
565 <span>&lt;=</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
566 <span>&gt;=</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
567 <span>&lt;</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
568 <span>&gt;</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
569 <span>=</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
570 <span>(</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
571 <span>)</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
572 <span>{</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
573 <span>}</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
574 <span>[</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
575 <span>]</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
576 <span>;</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
577 <span>,</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
578 <span>.</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
579 <span>..</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
580 <span>...</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
581 <span>%&gt;</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
582 <span>&lt;%</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
583 <span>&lt;%=</span>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
584 </p>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
585
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
586 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
587 <em>Literal strings</em>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
588 can be delimited by matching single or double quotes,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
589 and can contain the following C-like escape sequences:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
590 '<code>\a</code>' (bell),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
591 '<code>\b</code>' (backspace),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
592 '<code>\f</code>' (form feed),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
593 '<code>\n</code>' (newline),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
594 '<code>\r</code>' (carriage return),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
595 '<code>\t</code>' (horizontal tab),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
596 '<code>\v</code>' (vertical tab),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
597 '<code>\\</code>' (backslash),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
598 '<code>\"</code>' (quotation mark [double quote]),
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
599 and '<code>\'</code>' (apostrophe [single quote]).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
600 A backslash followed by a real newline
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
601 results in a newline in the string.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
602 The escape sequence '<code>\z</code>' skips the following span
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
603 of white-space characters,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
604 including line breaks;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
605 it is particularly useful to break and indent a long literal string
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
606 into multiple lines without adding the newlines and spaces
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
607 into the string contents.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
608 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
609
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
610 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
611 Luan can specify any character in a literal string by its numerical value.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
612 This can be done
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
613 with the escape sequence <code>\x<em>XX</em></code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
614 where <em>XX</em> is a sequence of exactly two hexadecimal digits,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
615 or with the escape sequence <code>\u<em>XXXX</em></code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
616 where <em>XXXX</em> is a sequence of exactly four hexadecimal digits,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
617 or with the escape sequence <code>\<em>ddd</em></code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
618 where <em>ddd</em> is a sequence of up to three decimal digits.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
619 (Note that if a decimal escape sequence is to be followed by a digit,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
620 it must be expressed using exactly three digits.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
621 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
622
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
623 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
624 Literal strings can also be defined using a long format
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
625 enclosed by <em>long brackets</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
626 We define an <em>opening long bracket of level <em>n</em></em> as an opening
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
627 square bracket followed by <em>n</em> equal signs followed by another
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
628 opening square bracket.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
629 So, an opening long bracket of level 0 is written as <code>[[</code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
630 an opening long bracket of level 1 is written as <code>[=[</code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
631 and so on.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
632 A <em>closing long bracket</em> is defined similarly;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
633 for instance,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
634 a closing long bracket of level 4 is written as <code>]====]</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
635 A <em>long literal</em> starts with an opening long bracket of any level and
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
636 ends at the first closing long bracket of the same level.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
637 It can contain any text except a closing bracket of the same level.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
638 Literals in this bracketed form can run for several lines,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
639 do not interpret any escape sequences,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
640 and ignore long brackets of any other level.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
641 Any kind of end-of-line sequence
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
642 (carriage return, newline, carriage return followed by newline,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
643 or newline followed by carriage return)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
644 is converted to a simple newline.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
645 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
646
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
647 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
648 Any character in a literal string not
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
649 explicitly affected by the previous rules represents itself.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
650 However, Luan opens files for parsing in text mode,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
651 and the system file functions may have problems with
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
652 some control characters.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
653 So, it is safer to represent
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
654 non-text data as a quoted literal with
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
655 explicit escape sequences for non-text characters.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
656 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
657
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
658 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
659 For convenience,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
660 when the opening long bracket is immediately followed by a newline,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
661 the newline is not included in the string.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
662 As an example
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
663 the five literal strings below denote the same string:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
664 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
665
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
666 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
667 a = 'alo\n123"'
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
668 a = "alo\n123\""
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
669 a = '\97lo\10\04923"'
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
670 a = [[alo
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
671 123"]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
672 a = [==[
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
673 alo
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
674 123"]==]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
675 </code>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
676
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
677 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
678 A <em>numerical constant</em> (or <em>numeral</em>)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
679 can be written with an optional fractional part
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
680 and an optional decimal exponent,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
681 marked by a letter '<code>e</code>' or '<code>E</code>'.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
682 Luan also accepts hexadecimal constants,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
683 which start with <code>0x</code> or <code>0X</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
684 Hexadecimal constants also accept an optional fractional part
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
685 plus an optional binary exponent,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
686 marked by a letter '<code>p</code>' or '<code>P</code>'.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
687 A numeric constant with a fractional dot or an exponent
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
688 denotes a float;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
689 otherwise it denotes an integer.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
690 Examples of valid integer constants are
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
691 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
692
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
693 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
694 3 345 0xff 0xBEBADA
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
695 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
696
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
697 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
698 Examples of valid float constants are
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
699 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
700
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
701 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
702 3.0 3.1416 314.16e-2 0.31416E1 34e1
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
703 0x0.1E 0xA23p-4 0X1.921FB54442D18P+1
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
704 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
705
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
706 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
707 A <em>comment</em> starts with a double hyphen (<code>--</code>)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
708 anywhere outside a string.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
709 If the text immediately after <code>--</code> is not an opening long bracket,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
710 the comment is a <em>short comment</em>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
711 which runs until the end of the line.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
712 Otherwise, it is a <em>long comment</em>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
713 which runs until the corresponding closing long bracket.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
714 Long comments are frequently used to disable code temporarily.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
715 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
716 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
717 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
718 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
719 vars = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
720 title = "Variables"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
721 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
722 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
723 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
724 Variables are places that store values.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
725 There are three kinds of variables in Luan:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
726 global variables, local variables, and table fields.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
727 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
728
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
729 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
730 A single name can denote a global variable or a local variable
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
731 (or a function's formal parameter,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
732 which is a particular kind of local variable):
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
733 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
734
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
735 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
736 var ::= Name
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
737 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
738
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
739 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
740 Name denotes identifiers, as defined in <a href="#lex">Lexical Conventions</a>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
741 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
742
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
743 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
744 Local variables are <em>lexically scoped</em>:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
745 local variables can be freely accessed by functions
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
746 defined inside their scope (see <a href="#visibility">Visibility Rules</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
747 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
748
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
749 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
750 Before the first assignment to a variable, its value is <b>nil</b>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
751 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
752
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
753 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
754 Square brackets are used to index a table:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
755 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
756
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
757 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
758 var ::= prefixexp &lsquo;<b>[</b>&rsquo; exp &lsquo;<b>]</b>&rsquo;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
759 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
760
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
761 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
762 The meaning of accesses to table fields can be changed via metatables.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
763 An access to an indexed variable <code>t[i]</code> is equivalent to
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
764 a call <code>gettable_event(t,i)</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
765 (See <a href="#meta">Metatables and Metamethods</a> for a complete description of the
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
766 <code>gettable_event</code> function.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
767 This function is not defined or callable in Luan.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
768 We use it here only for explanatory purposes.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
769 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
770
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
771 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
772 The syntax <code>var.Name</code> is just syntactic sugar for
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
773 <code>var["Name"]</code>:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
774 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
775
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
776 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
777 var ::= prefixexp &lsquo;<b>.</b>&rsquo; Name
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
778 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
779
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
780 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
781 Global variables are not available by default. To enable global variable, you must define <code>_ENV</code> as a local variable whose value is a table. If <code>_ENV</code> is not defined, then an unrecognized variable name will produce a compile error. If <code>_ENV</code> is defined then an access to an unrecognized variable name will be consider a global variable. So then an acces to global variable <code>x</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
782 is equivalent to <code>_ENV.x</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
783 Due to the way that chunks are compiled,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
784 <code>_ENV</code> is never a global name (see <a href="#env">Environments</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
785 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
786 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
787 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
788 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
789 stmt = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
790 title = "Statements"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
791 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
792 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
793 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
794 Luan supports an almost conventional set of statements,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
795 similar to those in Pascal or C.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
796 This set includes
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
797 assignments, control structures, function calls,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
798 and variable declarations.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
799 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
800 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
801 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
802 subs = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
803 blocks = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
804 title = "Blocks"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
805 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
806 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
807 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
808 A block is a list of statements,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
809 which are executed sequentially:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
810 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
811
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
812 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
813 block ::= {stat}
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
814 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
815
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
816 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
817 Luan has <em>empty statements</em>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
818 that allow you to separate statements with semicolons,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
819 start a block with a semicolon
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
820 or write two semicolons in sequence:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
821 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
822
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
823 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
824 stat ::= &lsquo;<b>;</b>&rsquo;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
825 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
826
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
827 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
828 A block can be explicitly delimited to produce a single statement:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
829 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
830
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
831 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
832 stat ::= <b>do</b> block end_do
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
833 end_do ::= <b>end_do</b> | <b>end</b>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
834 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
835
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
836 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
837 Explicit blocks are useful
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
838 to control the scope of variable declarations.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
839 Explicit blocks are also sometimes used to
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
840 add a <b>return</b> statement in the middle
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
841 of another block (see <a href="#control">Control Structures</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
842 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
843 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
844 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
845 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
846 chunks = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
847 title = "Chunks"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
848 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
849 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
850 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
851 The unit of compilation of Luan is called a <em>chunk</em>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
852 Syntactically,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
853 a chunk is simply a block:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
854 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
855
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
856 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
857 chunk ::= block
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
858 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
859
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
860 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
861 Luan handles a chunk as the body of an anonymous function
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
862 with a variable number of arguments
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
863 (see <a href="#fn_def">Function Definitions</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
864 As such, chunks can define local variables,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
865 receive arguments, and return values.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
866 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
867
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
868 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
869 A chunk can be stored in a file or in a string inside the host program.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
870 To execute a chunk,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
871 Luan first <em>loads</em> it,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
872 compiling the chunk's code,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
873 and then Luan executes the compiled code.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
874 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
875 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
876 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
877 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
878 assignment = {
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
879 title = "Assignment"
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
880 content = function()
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
881 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
882 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
883 Luan allows multiple assignments.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
884 Therefore, the syntax for assignment
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
885 defines a list of variables on the left side
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
886 and a list of expressions on the right side.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
887 The elements in both lists are separated by commas:
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
888 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
889
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
890 <pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
891 stat ::= varlist &lsquo;<b>=</b>&rsquo; explist
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
892 varlist ::= var {&lsquo;<b>,</b>&rsquo; var}
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
893 explist ::= exp {&lsquo;<b>,</b>&rsquo; exp}
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
894 </pre>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
895
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
896 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
897 Expressions are discussed in <a href="#expressions">Expressions</a>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
898 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
899
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
900 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
901 Before the assignment,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
902 the list of values is <em>adjusted</em> to the length of
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
903 the list of variables.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
904 If there are more values than needed,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
905 the excess values are thrown away.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
906 If there are fewer values than needed,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
907 the list is extended with as many <b>nil</b>'s as needed.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
908 If the list of expressions ends with a function call,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
909 then all values returned by that call enter the list of values,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
910 before the adjustment
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
911 (except when the call is enclosed in parentheses; see <a href="#expressions">Expressions</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
912 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
913
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
914 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
915 The assignment statement first evaluates all its expressions
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
916 and only then the assignments are performed.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
917 Thus the code
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
918 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
919
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
920 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
921 i = 3
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
922 i, a[i] = i+1, 20
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
923 </code>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
924
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
925 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
926 sets <code>a[3]</code> to 20, without affecting <code>a[4]</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
927 because the <code>i</code> in <code>a[i]</code> is evaluated (to 3)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
928 before it is assigned&nbsp;4.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
929 Similarly, the line
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
930 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
931
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
932 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
933 x, y = y, x
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
934 </code>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
935
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
936 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
937 exchanges the values of <code>x</code> and <code>y</code>,
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
938 and
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
939 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
940
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
941 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
942 x, y, z = y, z, x
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
943 </code>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
944
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
945 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
946 cyclically permutes the values of <code>x</code>, <code>y</code>, and <code>z</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
947 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
948
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
949 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
950 The meaning of assignments to global variables
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
951 and table fields can be changed via metatables.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
952 An assignment to an indexed variable <code>t[i] = val</code> is equivalent to
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
953 <code>settable_event(t,i,val)</code>.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
954 (See <a href="#meta">Metatables and Metamethods</a> for a complete description of the
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
955 <code>settable_event</code> function.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
956 This function is not defined or callable in Luan.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
957 We use it here only for explanatory purposes.)
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
958 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
959
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
960 <p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
961 An assignment to a global name <code>x = val</code>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
962 is equivalent to the assignment
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
963 <code>_ENV.x = val</code> (see <a href="#env">Environments</a>).
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
964 Global names are only available when <code>_ENV</code> is defined.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
965 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
966 <%
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
967 end
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
968 }
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
969 control = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
970 title = "Control Structures"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
971 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
972 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
973 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
974 The control structures
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
975 <b>if</b>, <b>while</b>, and <b>repeat</b> have the usual meaning and
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
976 familiar syntax:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
977 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
978
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
979 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
980 stat ::= <b>while</b> exp <b>do</b> block end_while
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
981 stat ::= <b>repeat</b> block <b>until</b> exp
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
982 stat ::= <b>if</b> exp <b>then</b> block {<b>elseif</b> exp <b>then</b> block} [<b>else</b> block] end_if
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
983 end_while ::= <b>end_while</b> | <b>end</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
984 end_if ::= <b>end_if</b> | <b>end</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
985 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
986
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
987 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
988 Luan also has a <b>for</b> statement (see <a href="#for">For Statement</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
989 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
990
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
991 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
992 The condition expression of a
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
993 control structure must be a boolean.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
994 Any other value type will produce an error.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
995 This helps catch errors and makes code more readable.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
996 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
997
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
998 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
999 In the <b>repeat</b>&ndash;<b>until</b> loop,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1000 the inner block does not end at the <b>until</b> keyword,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1001 but only after the condition.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1002 So, the condition can refer to local variables
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1003 declared inside the loop block.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1004 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1005
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1006 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1007 The <b>break</b> statement terminates the execution of a
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1008 <b>while</b>, <b>repeat</b>, or <b>for</b> loop,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1009 skipping to the next statement after the loop:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1010 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1011
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1012 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1013 stat ::= <b>break</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1014 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1015
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1016 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1017 A <b>break</b> ends the innermost enclosing loop.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1018 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1019
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1020 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1021 The <b>continue</b> statement jumps to the beginning of a
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1022 <b>while</b>, <b>repeat</b>, or <b>for</b> loop for next iteration,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1023 skipping the execution of statements inside the body of loop for the current iteration:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1024 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1025
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1026 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1027 stat ::= <b>continue</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1028 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1029
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1030 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1031 The <b>return</b> statement is used to return values
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1032 from a function or a chunk
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1033 (which is an anonymous function).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1034 Functions can return more than one value,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1035 so the syntax for the <b>return</b> statement is
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1036 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1037
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1038 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1039 stat ::= <b>return</b> [explist] [&lsquo;<b>;</b>&rsquo;]
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1040 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1041 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1042 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1043 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1044 ["for"] = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1045 title = "For Statement"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1046 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1047 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1048 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1049 The <b>for</b> statement works over functions,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1050 called <em>iterators</em>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1051 On each iteration, the iterator function is called to produce a new value,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1052 stopping when this new value is <b>nil</b>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1053 The <b>for</b> loop has the following syntax:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1054 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1055
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1056 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1057 stat ::= <b>for</b> namelist <b>in</b> exp <b>do</b> block end_for
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1058 namelist ::= Name {&lsquo;<b>,</b>&rsquo; Name}
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1059 end_for ::= <b>end_for</b> | <b>end</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1060 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1061
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1062 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1063 A <b>for</b> statement like
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1064 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1065
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1066 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1067 for <em>var_1</em>, &middot;&middot;&middot;, <em>var_n</em> in <em>exp</em> do <em>block</em> end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1068 </code>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1069
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1070 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1071 is equivalent to the code:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1072 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1073
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1074 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1075 do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1076 local <em>f</em> = <em>exp</em>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1077 while true do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1078 local <em>var_1</em>, &middot;&middot;&middot;, <em>var_n</em> = <em>f</em>()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1079 if <em>var_1</em> == nil then break end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1080 <em>block</em>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1081 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1082 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1083 </code>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1084
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1085 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1086 Note the following:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1087 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1088
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1089 <ul>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1090 <li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1091 <code><em>exp</em></code> is evaluated only once.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1092 Its result is an <em>iterator</em> function.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1093 </li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1094 <li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1095 <code><em>f</em></code> is an invisible variable.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1096 The name is here for explanatory purposes only.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1097 </li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1098 <li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1099 You can use <b>break</b> to exit a <b>for</b> loop.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1100 </li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1101 <li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1102 The loop variables <code><em>var_i</em></code> are local to the loop;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1103 you cannot use their values after the <b>for</b> ends.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1104 If you need these values,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1105 then assign them to other variables before breaking or exiting the loop.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1106 </li>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1107 </ul>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1108 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1109 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1110 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1111 ["try"] = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1112 title = "Try Statement"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1113 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1114 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1115 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1116 The <b>try</b> statement has the same semantics as in Java.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1117 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1118
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1119 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1120 stat ::= <b>try</b> block [<b>catch</b> Name block] [<b>finally</b> block] end_try
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1121 end_try ::= <b>end_try</b> | <b>end</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1122 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1123 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1124 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1125 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1126 fn_stmt = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1127 title = "Function Calls as Statements"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1128 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1129 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1130 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1131 To allow possible side-effects,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1132 function calls can be executed as statements:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1133 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1134
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1135 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1136 stat ::= functioncall
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1137 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1138
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1139 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1140 In this case, all returned values are thrown away.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1141 Function calls are explained in <a href="#fn_calls">Function Calls</a>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1142 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1143 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1144 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1145 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1146 logical_stmt = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1147 title = "Logical Statement"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1148 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1149 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1150 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1151 <a href="#logical_ops">Logical expressions</a> can be statements.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1152 This is useful in cases like this:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1153 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1154
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1155 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1156 x==5 or error "x should be 5"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1157 </code>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1158 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1159 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1160 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1161 local_stmt = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1162 title = "Local Declarations"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1163 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1164 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1165 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1166 Local variables can be declared anywhere inside a block.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1167 The declaration can include an initial assignment:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1168 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1169
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1170 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1171 stat ::= <b>local</b> namelist [&lsquo;<b>=</b>&rsquo; explist]
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1172 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1173
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1174 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1175 If present, an initial assignment has the same semantics
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1176 of a multiple assignment (see <a href="#assignment">Assignment</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1177 Otherwise, all variables are initialized with <b>nil</b>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1178 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1179
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1180 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1181 A chunk is also a block (see <a href="#chunks">Chunks</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1182 and so local variables can be declared in a chunk outside any explicit block.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1183 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1184
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1185 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1186 The visibility rules for local variables are explained in <a href="#visibility">Visibility Rules</a>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1187 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1188 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1189 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1190 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1191 template_stmt = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1192 title = "Template Statements"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1193 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1194 %>
1827
50e570b598b2 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1818
diff changeset
1195 <p>Template statements provide the full equivalent of <a href="https://en.wikipedia.org/wiki/Jakarta_Server_Pages">JSP</a> but in a general way. Template statements write to standard output. For example:</p>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1196 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1197
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1198 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1199 local name = "Bob"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1200 %&gt;
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1201 Hello &lt;%= name %&gt;!
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1202 Bye &lt;%= name %&gt;.
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1203 &lt;%
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1204 </code>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1205
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1206 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1207 is equivalent to the code:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1208 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1209
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1210 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1211 local name = "Bob"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1212 require("luan:Io.luan").stdout.write( "Hello ", name , "!\nBye ", name , ".\n" )
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1213 </code>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1214 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1215 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1216 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1217 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1218 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1219 expressions = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1220 title = "Expressions"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1221 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1222 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1223 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1224 The basic expressions in Luan are the following:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1225 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1226
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1227 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1228 exp ::= prefixexp
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1229 exp ::= <b>nil</b> | <b>false</b> | <b>true</b>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1230 exp ::= Numeral
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1231 exp ::= LiteralString
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1232 exp ::= functiondef
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1233 exp ::= tableconstructor
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1234 exp ::= &lsquo;<b>...</b>&rsquo;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1235 exp ::= exp binop exp
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1236 exp ::= unop exp
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1237 prefixexp ::= var | functioncall | &lsquo;<b>(</b>&rsquo; exp &lsquo;<b>)</b>&rsquo;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1238 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1239
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1240 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1241 Numerals and literal strings are explained in <a href="#lex">Lexical Conventions</a>;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1242 variables are explained in <a href="#vars">Variables</a>;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1243 function definitions are explained in <a href="#fn_def">Function Definitions</a>;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1244 function calls are explained in <a href="#fn_calls">Function Calls</a>;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1245 table constructors are explained in <a href="#constructors">Table Constructors</a>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1246 Vararg expressions,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1247 denoted by three dots ('<code>...</code>'), can only be used when
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1248 directly inside a vararg function;
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1249 they are explained in <a href="#fn_def">Function Definitions</a>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1250 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1251
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1252 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1253 Binary operators comprise arithmetic operators (see <a href="#arithmetic">Arithmetic Operators</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1254 relational operators (see <a href="#relational">Relational Operators</a>), logical operators (see <a href="#logical_ops">Logical Operators</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1255 and the concatenation operator (see <a href="#concatenation">Concatenation</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1256 Unary operators comprise the unary minus (see <a href="#arithmetic">Arithmetic Operators</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1257 the unary logical <b>not</b> (see <a href="#logical_ops">Logical Operators</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1258 and the unary <em>length operator</em> (see <a href="#length">The Length Operator</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1259 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1260
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1261 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1262 Both function calls and vararg expressions can result in multiple values.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1263 If a function call is used as a statement (see <a href="#fn_stmt">Function Calls as Statements</a>),
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1264 then its return list is adjusted to zero elements,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1265 thus discarding all returned values.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1266 If an expression is used as the last (or the only) element
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1267 of a list of expressions,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1268 then no adjustment is made
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1269 (unless the expression is enclosed in parentheses).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1270 In all other contexts,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1271 Luan adjusts the result list to one element,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1272 either discarding all values except the first one
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1273 or adding a single <b>nil</b> if there are no values.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1274 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1275
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1276 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1277 Here are some examples:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1278 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1279
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1280 <pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1281 f() -- adjusted to 0 results
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1282 g(f(), x) -- f() is adjusted to 1 result
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1283 g(x, f()) -- g gets x plus all results from f()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1284 a,b,c = f(), x -- f() is adjusted to 1 result (c gets nil)
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1285 a,b = ... -- a gets the first vararg parameter, b gets
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1286 -- the second (both a and b can get nil if there
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1287 -- is no corresponding vararg parameter)
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1288
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1289 a,b,c = x, f() -- f() is adjusted to 2 results
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1290 a,b,c = f() -- f() is adjusted to 3 results
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1291 return f() -- returns all results from f()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1292 return ... -- returns all received vararg parameters
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1293 return x,y,f() -- returns x, y, and all results from f()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1294 {f()} -- creates a list with all results from f()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1295 {...} -- creates a list with all vararg parameters
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1296 {f(), nil} -- f() is adjusted to 1 result
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1297 </pre>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1298
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1299 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1300 Any expression enclosed in parentheses always results in only one value.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1301 Thus,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1302 <code>(f(x,y,z))</code> is always a single value,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1303 even if <code>f</code> returns several values.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1304 (The value of <code>(f(x,y,z))</code> is the first value returned by <code>f</code>
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1305 or <code>nil</code> if <code>f</code> does not return any values.)
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1306 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1307 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1308 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1309 subs = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1310 arithmetic = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1311 title = "Arithmetic Operators"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1312 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1313 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1314 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1315 Luan supports the following arithmetic operators:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1316 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1317
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1318 <ul>
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1319 <li><b>+</b>: addition</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1320 <li><b>-</b>: subtraction</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1321 <li><b>*</b>: multiplication</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1322 <li><b>/</b>: float division</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1323 <li><b>//</b>: floor division</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1324 <li><b>%</b>: modulo</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1325 <li><b>^</b>: exponentiation</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1326 <li><b>-</b>: unary minus</li>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1327 </ul>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1328
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1329 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
1330 Addition, subtraction, multiplication, division, and unary minus are the same as these operators in Java. Exponentiation uses Java's <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#pow-double-double-">Math.pow</a> function.
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1331 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1332
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1333 <p>
1680
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
1334 Floor division (//) is a division that rounds the quotient towards minus infinity, that is, the floor of the division of its operands.
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
1335 </p>
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
1336
9ef19f5ea973 add // operator
Franklin Schmidt <fschmidt@gmail.com>
parents: 1670
diff changeset
1337 <p>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1338 Modulo is defined as the remainder of a division
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1339 that rounds the quotient towards minus infinite (floor division).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1340 (The Java modulo operator is not used.)
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1341 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1342 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1343 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1344 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1345 conversions = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1346 title = "Coercions and Conversions"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1347 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1348 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1349 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1350 Luan generally avoids automatic conversions.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1351 String concatenation automatically converts all of its arguments to strings.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1352 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1353
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1354 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1355 Luan provides library functions for explicit type conversions.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1356 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1357 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1358 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1359 }
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1360 relational = {
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1361 title = "Relational Operators"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1362 content = function()
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1363 %>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1364 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1365 Luan supports the following relational operators:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1366 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1367
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1368 <ul>
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1369 <li><b>==</b>: equality</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1370 <li><b>~=</b>: inequality</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1371 <li><b>&lt;</b>: less than</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1372 <li><b>&gt;</b>: greater than</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1373 <li><b>&lt;=</b>: less or equal</li>
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1374 <li><b>&gt;=</b>: greater or equal</li>
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1375 </ul>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1376
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1377 <p>
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1378 These operators always result in <code>false</code> or <code>true</code>.
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1379 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1380
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1381 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1382 Equality (<code>==</code>) first compares the type of its operands.
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1383 If the types are different, then the result is <code>false</code>.
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1384 Otherwise, the values of the operands are compared.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1385 Strings, numbers, and binary values are compared in the obvious way (by value).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1386 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1387
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1388 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1389 Tables
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1390 are compared by reference:
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1391 two objects are considered equal only if they are the same object.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1392 Every time you create a new table,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1393 it is different from any previously existing table.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1394 Closures are also compared by reference.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1395 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1396
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1397 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1398 You can change the way that Luan compares tables
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1399 by using the "eq" metamethod (see <a href="#meta">Metatables and Metamethods</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1400 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1401
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1402 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
1403 Java values are compared for equality with the Java <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-"><code>equals</code></a> method.
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1404 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1405
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1406 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1407 Equality comparisons do not convert strings to numbers
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1408 or vice versa.
1926
4206242c7a13 better css
Franklin Schmidt <fschmidt@gmail.com>
parents: 1923
diff changeset
1409 Thus, <code>"0"==0</code> evaluates to <code>false</code>,
1660
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1410 and <code>t[0]</code> and <code>t["0"]</code> denote different
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1411 entries in a table.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1412 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1413
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1414 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1415 The operator <code>~=</code> is exactly the negation of equality (<code>==</code>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1416 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1417
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1418 <p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1419 The order operators work as follows.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1420 If both arguments are numbers,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1421 then they are compared following
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1422 the usual rule for binary operations.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1423 Otherwise, if both arguments are strings,
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1424 then their values are compared according to the current locale.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1425 Otherwise, Luan tries to call the "lt" or the "le"
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1426 metamethod (see <a href="#meta">Metatables and Metamethods</a>).
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1427 A comparison <code>a &gt; b</code> is translated to <code>b &lt; a</code>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1428 and <code>a &gt;= b</code> is translated to <code>b &lt;= a</code>.
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1429 </p>
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1430 <%
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1431 end
2968e43cdd44 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1656
diff changeset
1432 }
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1433 logical_ops = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1434 title = "Logical Operators"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1435 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1436 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1437 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1438 The logical operators in Luan are
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1439 <b>and</b>, <b>or</b>, and <b>not</b>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1440 The <b>and</b> and <b>or</b> operators consider both <b>false</b> and <b>nil</b> as false
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1441 and anything else as true.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1442 Like the control structures (see <a href="#control">Control Structures</a>),
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1443 the <b>not</b> operator requires a boolean value.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1444 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1445
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1446 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1447 The negation operator <b>not</b> always returns <b>false</b> or <b>true</b>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1448 The conjunction operator <b>and</b> returns its first argument
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1449 if this value is <b>false</b> or <b>nil</b>;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1450 otherwise, <b>and</b> returns its second argument.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1451 The disjunction operator <b>or</b> returns its first argument
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1452 if this value is different from <b>nil</b> and <b>false</b>;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1453 otherwise, <b>or</b> returns its second argument.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1454 Both <b>and</b> and <b>or</b> use short-circuit evaluation;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1455 that is,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1456 the second operand is evaluated only if necessary.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1457 Here are some examples:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1458 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1459
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1460 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1461 10 or 20 --&gt; 10
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1462 10 or error() --&gt; 10
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1463 nil or "a" --&gt; "a"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1464 nil and 10 --&gt; nil
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1465 false and error() --&gt; false
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1466 false and nil --&gt; false
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1467 false or nil --&gt; nil
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1468 10 and 20 --&gt; 20
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1469 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1470
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1471 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1472 (In this manual,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1473 <code>--&gt;</code> indicates the result of the preceding expression.)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1474 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1475 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1476 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1477 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1478 concatenation = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1479 title = "Concatenation"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1480 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1481 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1482 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1483 The string concatenation operator in Luan is
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1484 denoted by two dots ('<code>..</code>').
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1485 All operands are converted to strings.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1486 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1487 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1488 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1489 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1490 length = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1491 title = "The Length Operator"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1492 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1493 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1494 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1495 The length operator is denoted by the unary prefix operator <code>#</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1496 The length of a string is its number of characters.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1497 The length of a binary is its number of bytes.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1498 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1499
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1500 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1501 A program can modify the behavior of the length operator for
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1502 any table through the <code>__len</code> metamethod (see <a href="#meta">Metatables and Metamethods</a>).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1503 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1504
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1505 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1506 Unless a <code>__len</code> metamethod is given,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1507 the length of a table <code>t</code> is defined
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1508 as the number of elements in <em>sequence</em>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1509 that is,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1510 the size of the set of its positive numeric keys is equal to <em>{1..n}</em>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1511 for some non-negative integer <em>n</em>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1512 In that case, <em>n</em> is its length.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1513 Note that a table like
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1514 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1515
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1516 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1517 {10, 20, nil, 40}
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1518 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1519
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1520 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1521 has a length of <code>2</code>, because that is the last key in sequence.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1522 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1523 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1524 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1525 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1526 precedence = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1527 title = "Precedence"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1528 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1529 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1530 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1531 Operator precedence in Luan follows the table below,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1532 from lower to higher priority:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1533 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1534
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1535 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1536 or
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1537 and
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1538 &lt; &gt; &lt;= &gt;= ~= ==
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1539 ..
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1540 + -
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1541 * / %
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1542 unary operators (not # -)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1543 ^
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1544 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1545
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1546 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1547 As usual,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1548 you can use parentheses to change the precedences of an expression.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1549 The concatenation ('<code>..</code>') and exponentiation ('<code>^</code>')
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1550 operators are right associative.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1551 All other binary operators are left associative.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1552 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1553 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1554 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1555 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1556 constructors = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1557 title = "Table Constructors"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1558 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1559 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1560 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1561 Table constructors are expressions that create tables.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1562 Every time a constructor is evaluated, a new table is created.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1563 A constructor can be used to create an empty table
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1564 or to create a table and initialize some of its fields.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1565 The general syntax for constructors is
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1566 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1567
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1568 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1569 tableconstructor ::= &lsquo;<b>{</b>&rsquo; fieldlist &lsquo;<b>}</b>&rsquo;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1570 fieldlist ::= [field] {fieldsep [field]}
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1571 field ::= &lsquo;<b>[</b>&rsquo; exp &lsquo;<b>]</b>&rsquo; &lsquo;<b>=</b>&rsquo; exp | Name &lsquo;<b>=</b>&rsquo; exp | exp
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1572 fieldsep ::= &lsquo;<b>,</b>&rsquo; | &lsquo;<b>;</b>&rsquo; | <b>end_of_line</b>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1573 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1574
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1575 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1576 Each field of the form <code>[exp1] = exp2</code> adds to the new table an entry
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1577 with key <code>exp1</code> and value <code>exp2</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1578 A field of the form <code>name = exp</code> is equivalent to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1579 <code>["name"] = exp</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1580 Finally, fields of the form <code>exp</code> are equivalent to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1581 <code>[i] = exp</code>, where <code>i</code> are consecutive integers
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1582 starting with 1.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1583 Fields in the other formats do not affect this counting.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1584 For example,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1585 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1586
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1587 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1588 a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1589 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1590
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1591 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1592 is equivalent to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1593 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1594
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1595 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1596 do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1597 local t = {}
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1598 t[f(1)] = g
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1599 t[1] = "x" -- 1st exp
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1600 t[2] = "y" -- 2nd exp
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1601 t.x = 1 -- t["x"] = 1
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1602 t[3] = f(x) -- 3rd exp
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1603 t[30] = 23
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1604 t[4] = 45 -- 4th exp
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1605 a = t
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1606 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1607 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1608
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1609 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1610 The order of the assignments in a constructor is undefined.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1611 (This order would be relevant only when there are repeated keys.)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1612 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1613
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1614 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1615 If the last field in the list has the form <code>exp</code>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1616 and the expression is a function call or a vararg expression,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1617 then all values returned by this expression enter the list consecutively
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1618 (see <a href="#fn_calls">Function Calls</a>).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1619 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1620
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1621 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1622 The field list can have an optional trailing separator,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1623 as a convenience for machine-generated code.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1624 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1625 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1626 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1627 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1628 fn_calls = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1629 title = "Function Calls"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1630 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1631 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1632 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1633 A function call in Luan has the following syntax:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1634 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1635
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1636 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1637 functioncall ::= prefixexp args
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1638 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1639
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1640 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1641 In a function call,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1642 first prefixexp and args are evaluated.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1643 The value of prefixexp must have type <em>function</em>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1644 This function is called
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1645 with the given arguments.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1646 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1647
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1648 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1649 Arguments have the following syntax:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1650 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1651
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1652 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1653 args ::= &lsquo;<b>(</b>&rsquo; [explist] &lsquo;<b>)</b>&rsquo;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1654 args ::= tableconstructor
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1655 args ::= LiteralString
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1656 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1657
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1658 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1659 All argument expressions are evaluated before the call.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1660 A call of the form <code>f{<em>fields</em>}</code> is
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1661 syntactic sugar for <code>f({<em>fields</em>})</code>;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1662 that is, the argument list is a single new table.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1663 A call of the form <code>f'<em>string</em>'</code>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1664 (or <code>f"<em>string</em>"</code> or <code>f[[<em>string</em>]]</code>)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1665 is syntactic sugar for <code>f('<em>string</em>')</code>;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1666 that is, the argument list is a single literal string.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1667 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1668 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1669 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1670 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1671 fn_def = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1672 title = "Function Definitions"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1673 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1674 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1675 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1676 The syntax for function definition is
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1677 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1678
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1679 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1680 functiondef ::= <b>function</b> funcbody
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1681 funcbody ::= &lsquo;<b>(</b>&rsquo; [parlist] &lsquo;<b>)</b>&rsquo; block end_function
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1682 end_function ::= <b>end_function</b> | <b>end</b>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1683 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1684
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1685 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1686 The following syntactic sugar simplifies function definitions:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1687 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1688
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1689 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1690 stat ::= <b>function</b> funcname funcbody
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1691 stat ::= <b>local</b> <b>function</b> Name funcbody
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1692 funcname ::= Name {&lsquo;<b>.</b>&rsquo; Name} [&lsquo;<b>:</b>&rsquo; Name]
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1693 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1694
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1695 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1696 The statement
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1697 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1698
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1699 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1700 function f () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1701 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1702
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1703 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1704 translates to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1705 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1706
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1707 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1708 f = function () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1709 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1710
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1711 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1712 The statement
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1713 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1714
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1715 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1716 function t.a.b.c.f () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1717 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1718
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1719 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1720 translates to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1721 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1722
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1723 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1724 t.a.b.c.f = function () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1725 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1726
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1727 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1728 The statement
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1729 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1730
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1731 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1732 local function f () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1733 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1734
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1735 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1736 translates to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1737 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1738
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1739 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1740 local f; f = function () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1741 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1742
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1743 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1744 not to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1745 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1746
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1747 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1748 local f = function () <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1749 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1750
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1751 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1752 (This only makes a difference when the body of the function
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1753 contains references to <code>f</code>.)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1754 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1755
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1756 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1757 A function definition is an executable expression,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1758 whose value has type <em>function</em>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1759 When Luan precompiles a chunk,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1760 all its function bodies are precompiled too.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1761 Then, whenever Luan executes the function definition,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1762 the function is <em>instantiated</em> (or <em>closed</em>).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1763 This function instance (or <em>closure</em>)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1764 is the final value of the expression.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1765 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1766
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1767 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1768 Parameters act as local variables that are
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1769 initialized with the argument values:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1770 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1771
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1772 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1773 parlist ::= namelist [&lsquo;<b>,</b>&rsquo; &lsquo;<b>...</b>&rsquo;] | &lsquo;<b>...</b>&rsquo;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1774 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1775
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1776 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1777 When a function is called,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1778 the list of arguments is adjusted to
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1779 the length of the list of parameters if the list is too short,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1780 unless the function is a <em>vararg function</em>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1781 which is indicated by three dots ('<code>...</code>')
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1782 at the end of its parameter list.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1783 A vararg function does not adjust its argument list;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1784 instead, it collects all extra arguments and supplies them
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1785 to the function through a <em>vararg expression</em>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1786 which is also written as three dots.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1787 The value of this expression is a list of all actual extra arguments,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1788 similar to a function with multiple results.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1789 If a vararg expression is used inside another expression
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1790 or in the middle of a list of expressions,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1791 then its return list is adjusted to one element.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1792 If the expression is used as the last element of a list of expressions,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1793 then no adjustment is made
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1794 (unless that last expression is enclosed in parentheses).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1795 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1796
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1797 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1798 As an example, consider the following definitions:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1799 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1800 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1801 function f(a, b) end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1802 function g(a, b, ...) end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1803 function r() return 1,2,3 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1804 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1805
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1806 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1807 Then, we have the following mapping from arguments to parameters and
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1808 to the vararg expression:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1809 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1810 <pre>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1811 CALL PARAMETERS
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1812
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1813 f(3) a=3, b=nil
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1814 f(3, 4) a=3, b=4
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1815 f(3, 4, 5) runtime error
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1816 f(r(), 10) runtime error
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1817 f(r()) runtime error
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1818
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1819 g(3) a=3, b=nil, ... --&gt; (nothing)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1820 g(3, 4) a=3, b=4, ... --&gt; (nothing)
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1821 g(3, 4, 5, 8) a=3, b=4, ... --&gt; 5 8
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1822 g(5, r()) a=5, b=1, ... --&gt; 2 3
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1823 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1824
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1825 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1826 Results are returned using the <b>return</b> statement (see <a href="#control">Control Structures</a>).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1827 If control reaches the end of a function
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1828 without encountering a <b>return</b> statement,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1829 then the function returns with no results.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1830 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1831 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1832 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1833 }
1797
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1834 backticks = {
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1835 title = "Backticks"
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1836 content = function()
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1837 %>
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1838 <p>
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1839 A block between backticks is run and then whatever was sent to standard output is returned as a string. Examples:
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1840 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1841 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1842 local s = `%&gt;1 + 1 = &lt;%=1+1%&gt;&lt;%`
1797
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1843
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1844 local s = ` fn(whatever) `
1797
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1845
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1846 local s = `%&gt;
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1847 ...
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1848 &lt;%`
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1849 </code>
1797
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1850 <p>
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1851 Backticks complement <a href="#template_stmt">template statements</a>.
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1852 </p>
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1853 <%
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1854 end
ba43135bb98d backticks docs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1722
diff changeset
1855 }
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1856 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1857 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1858 visibility = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1859 title = "Visibility Rules"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1860 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1861 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1862 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1863 Luan is a lexically scoped language.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1864 The scope of a local variable begins at the first statement after
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1865 its declaration and lasts until the last non-void statement
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1866 of the innermost block that includes the declaration.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1867 Consider the following example:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1868 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1869 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1870 local x = 10 -- global to module
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1871 do -- new block
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1872 local x = x -- new 'x', with value 10
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1873 print(x) --&gt; 10
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1874 x = x+1
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1875 do -- another block
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1876 local x = x+1 -- another 'x'
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1877 print(x) --&gt; 12
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1878 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1879 print(x) --&gt; 11
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1880 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1881 print(x) --&gt; 10 (the global one)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1882 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1883
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1884 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1885 Notice that, in a declaration like <code>local x = x</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1886 the new <code>x</code> being declared is not in scope yet,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1887 and so the second <code>x</code> refers to the outside variable.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1888 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1889
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1890 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1891 Because of the lexical scoping rules,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1892 local variables can be freely accessed by functions
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1893 defined inside their scope.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1894 A local variable used by an inner function is called
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1895 an <em>upvalue</em>, or <em>external local variable</em>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1896 inside the inner function.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1897 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1898
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1899 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1900 Notice that each execution of a <b>local</b> statement
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1901 defines new local variables.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1902 Consider the following example:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1903 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1904
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1905 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1906 local a = {}
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1907 local x = 20
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1908 for i=1,10 do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1909 local y = 0
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1910 a[i] = function () y=y+1; return x+y end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1911 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1912 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1913
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1914 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1915 The loop creates ten closures
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1916 (that is, ten instances of the anonymous function).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1917 Each of these closures uses a different <code>y</code> variable,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1918 while all of them share the same <code>x</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1919 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1920 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1921 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1922 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1923 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1924 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1925 libs = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1926 title = "Standard Libraries"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1927 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1928 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1929 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1930 The standard Luan libraries provide useful functions
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1931 that are implemented both in Java and in Luan itself.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1932 How each function is implemented shouldn't matter to the user.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1933 Some of these functions provide essential services to the language
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1934 (e.g., <a href="#Luan.type"><code>type</code></a> and <a href="#Luan.get_metatable"><code>get_metatable</code></a>);
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1935 others provide access to "outside" services (e.g., I/O).
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1936 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1937 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1938 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1939 subs = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1940 default_lib = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1941 title = "Default Environment"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1942 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1943 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1944 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1945 This is provided by default as a local variable for any Luan code as described in <a href="#env">Environments</a>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1946 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1947 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1948 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1949 subs = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1950 require = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1951 title = "require (mod_uri)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1952 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1953 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1954 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1955 Example use:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1956 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1957 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1958 local Table = require "luan:Table.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1959 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1960
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1961 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1962 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1963 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1964 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1965 local function require(mod_name)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1966 return <a href="#Package.load">Package.load</a>(mod_name) or <a href="#Luan.error">Luan.error</a>("module '"..mod_name.."' not found")
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1967 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1968 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1969
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1970 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1971 A special case is:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1972 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1973 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1974 require "java"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1975 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1976
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1977 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1978 This enables Java in the current chunk if that chunk has permission to use Java. If the chunk doesn't have permission to use Java, then an error is thrown.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1979 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1980 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1981 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1982 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1983 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1984 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1985 luan_lib = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1986 title = "Basic Functions"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1987 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1988 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1989 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1990 Include this library by:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1991 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1992
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1993 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1994 local Luan = require "luan:Luan.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
1995 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1996
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1997 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1998 The basic library provides basic functions to Luan that don't depend on other libaries.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
1999 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2000 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2001 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2002 subs = {
1813
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2003 ["Luan.arg"] = {
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2004 title = "Luan.arg"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2005 content = function()
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2006 %>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2007 <p>If Luan was run from the command line then this is a list of the command line arguments. For example if one runs Luan like this:</p>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2008
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2009 <code block>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2010 luan t.luan a b c
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2011 </code>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2012
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2013 <p>Then Luan.arg will contain:</p>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2014
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2015 <code block>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2016 {
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2017 [0] = "t.luan"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2018 [1] = "a"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2019 [2] = "b"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2020 [3] = "c"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2021 }
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2022 </code>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2023
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2024 <p>And of course <code>#Luan.arg</code> will be <code>3</code>.</p>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2025 <%
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2026 end
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2027 }
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2028 ["Luan.do_file"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2029 title = "Luan.do_file ([uri])"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2030 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2031 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2032 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2033 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2034 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2035 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2036 function Luan.do_file(uri)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2037 local fn = <a href="#Luan.load_file">Luan.load_file</a>(uri) or <a href="#Luan.error">Luan.error</a>("file '"..uri.."' not found")
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2038 return fn()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2039 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2040 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2041 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2042 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2043 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2044 ["Luan.error"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2045 title = "Luan.error (message)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2046 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2047 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2048 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2049 Throws an error containing the message.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2050 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2051
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2052 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2053 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2054 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2055 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2056 function Luan.error(message)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2057 <a href="#Luan.new_error">Luan.new_error</a>(message).throw()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2058 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2059 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2060 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2061 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2062 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2063 ["Luan.eval"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2064 title = "Luan.eval (text [, source_name [, env]])"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2065 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2066 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2067 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2068 Evaluates <code>text</code> as a Luan expression.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2069 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2070
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2071 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2072 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2073 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2074 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2075 function Luan.eval(text,source_name, env)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2076 return <a href="#Luan.load">Luan.load</a>( "return "..text, source_name or "eval", env )()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2077 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2078 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2079 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2080 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2081 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2082 ["Luan.get_metatable"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2083 title = "Luan.get_metatable (table)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2084 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2085 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2086 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2087 If <code>table</code> does not have a metatable, returns <b>nil</b>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2088 Otherwise,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2089 if the table's metatable has a <code>"__metatable"</code> field,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2090 returns the associated value.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2091 Otherwise, returns the metatable of the given table.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2092 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2093 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2094 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2095 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2096 ["Luan.hash_code"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2097 title = "Luan.hash_code (v)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2098 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2099 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2100 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2101 Returns the hash code of <code>v</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2102 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2103 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2104 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2105 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2106 ["Luan.ipairs"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2107 title = "Luan.ipairs (t)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2108 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2109 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2110 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2111 Returns an iterator function
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2112 so that the construction
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2113 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2114 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2115 for i,v in ipairs(t) do <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2116 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2117
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2118 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2119 will iterate over the key&ndash;value pairs
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2120 (<code>1,t[1]</code>), (<code>2,t[2]</code>), ...,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2121 up to the first nil value.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2122 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2123
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2124 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2125 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2126 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2127 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2128 function Luan.ipairs(t)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2129 local i = 0
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2130 return function()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2131 if i < #t then
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2132 i = i + 1
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2133 return i, t[i]
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2134 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2135 end
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2136 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2137 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2138 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2139 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2140 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2141 ["Luan.load"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2142 title = "Luan.load (text, [source_name [, env [, persist]]])"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2143 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2144 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2145 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2146 Loads a chunk.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2147 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2148
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2149 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2150 The <code>text</code> is compiled.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2151 If there are no syntactic errors,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2152 returns the compiled chunk as a function;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2153 otherwise, throws an error.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2154 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2155
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2156 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2157 The <code>source_name</code> parameter is a string saying where the text came from. It is used to produce error messages. Defaults to "load".
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2158 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2159
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2160 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2161 If the <code>env</code> parameter is supplied, it becomes the <code>_ENV</code> of the chunk.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2162 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2163
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2164 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2165 The <code>persist</code> parameter is a boolean which determines if the compiled code is persistently cached to a temporary file. Defaults to <code>false</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2166 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2167 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2168 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2169 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2170 ["Luan.load_file"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2171 title = "Luan.load_file (file_uri)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2172 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2173 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2174 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2175 Similar to <a href="#Luan.load"><code>load</code></a>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2176 but gets the chunk from file <code>file_uri</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2177 <code>file_uri</code> can be a string or a uri table.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2178 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2179 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2180 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2181 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2182 ["Luan.new_error"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2183 title = "Luan.new_error (message)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2184 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2185 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2186 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2187 Creates a new error table containing the message assigned to "<code>message</code>". The error table also contains a <code>throw</code> function which throws the error. The table also contains a list of stack trace elements where each stack trace element is a table containing "<code>source</code>", "<code>line</code>", and possible "<code>call_to</code>". The table also has a metatable containing "<code>__to_string</code>" to render the error.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2188 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2189
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2190 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2191 To print the current stack trace, you could do:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2192 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2193 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2194 Io.print( Luan.new_error "stack" )
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2195 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2196 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2197 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2198 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2199 ["Luan.pairs"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2200 title = "Luan.pairs (t)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2201 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2202 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2203 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2204 If <code>t</code> has a metamethod <code>__pairs</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2205 calls it with <code>t</code> as argument and returns the
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2206 result from the call.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2207 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2208
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2209 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2210 Otherwise,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2211 returns a function
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2212 so that the construction
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2213 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2214 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2215 for k,v in pairs(t) do <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2216 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2217
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2218 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2219 will iterate over all key&ndash;value pairs of table <code>t</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2220 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2221 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2222 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2223 }
1813
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2224 ["Luan.parse"] = {
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2225 title = "Luan.parse (s)"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2226 content = function()
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2227 %>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2228 <p>This Luan's equivalent to Javascript's JSON.parse(), but for a Luan value. In addition to the usual JSON values, Luan.parse allows long strings and allows specifying numeric types of <i>double</i>, <i>float</i>, <i>integer</i>, and <i>long</i>. For example:</p>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2229
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2230 <code block>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2231 local t = Luan.parse[=[
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2232 {
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2233 nothing = nil
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2234 t = true
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2235 f = false
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2236 s = "string"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2237 ls = [[long string]]
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2238 n = 3
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2239 d = double(3)
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2240 f = float(3)
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2241 i = integer(3)
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2242 l = long(3)
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2243 list = { 1, 2, 3 }
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2244 table = {
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2245 one = 1
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2246 two = 2
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2247 three = 3
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2248 }
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2249 ["ugly-key"] = "something"
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2250 }
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2251 ]=]
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2252 </code>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2253 <%
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2254 end
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2255 }
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2256 ["Luan.range"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2257 title = "Luan.range (start, stop [, step])"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2258 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2259 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2260 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2261 Based on <a href="https://docs.python.org/2/library/functions.html#range">the Python range() function</a>, this lets one iterate through a sequence of numbers.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2262 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2263
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2264 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2265 Example use:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2266 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2267 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2268 for i in range(1,10) do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2269 Io.print("count up:",i)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2270 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2271 for i in range(10,0,-1) do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2272 Io.print("count down:",i)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2273 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2274 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2275
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2276 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2277 Could be defined as:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2278 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2279 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2280 function Luan.range(start, stop, step)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2281 step = step or 1
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2282 step == 0 and <a href="#Luan.error">Luan.error</a> "bad argument #3 (step may not be zero)"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2283 local i = start
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2284 return function()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2285 if step > 0 and i <= stop or step < 0 and i >= stop then
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2286 local rtn = i
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2287 i = i + step
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2288 return rtn
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2289 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2290 end
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2291 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2292 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2293 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2294 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2295 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2296 ["Luan.raw_equal"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2297 title = "Luan.raw_equal (v1, v2)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2298 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2299 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2300 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2301 Checks whether <code>v1</code> is equal to <code>v2</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2302 without invoking any metamethod.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2303 Returns a boolean.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2304 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2305 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2306 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2307 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2308 ["Luan.raw_get"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2309 title = "Luan.raw_get (table, index)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2310 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2311 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2312 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2313 Gets the real value of <code>table[index]</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2314 without invoking any metamethod.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2315 <code>table</code> must be a table;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2316 <code>index</code> may be any value.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2317 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2318 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2319 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2320 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2321 ["Luan.raw_len"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2322 title = "Luan.raw_len (v)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2323 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2324 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2325 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2326 Returns the length of the object <code>v</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2327 which must be a table or a string,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2328 without invoking any metamethod.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2329 Returns an integer.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2330 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2331 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2332 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2333 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2334 ["Luan.raw_set"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2335 title = "Luan.raw_set (table, index, value)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2336 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2337 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2338 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2339 Sets the real value of <code>table[index]</code> to <code>value</code>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2340 without invoking any metamethod.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2341 <code>table</code> must be a table,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2342 <code>index</code> any value different from <b>nil</b>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2343 and <code>value</code> any Luan value.
1882
Franklin Schmidt <fschmidt@gmail.com>
parents: 1881
diff changeset
2344 Returns the old value of <code>table[index]</code>.
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2345 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2346 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2347 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2348 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2349 ["Luan.set_metatable"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2350 title = "Luan.set_metatable (table, metatable)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2351 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2352 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2353 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2354 Sets the metatable for the given table.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2355 If <code>metatable</code> is <b>nil</b>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2356 removes the metatable of the given table.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2357 If the original metatable has a <code>"__metatable"</code> field,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2358 raises an error.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2359 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2360 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2361 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2362 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2363 ["Luan.stringify"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2364 title = "Luan.stringify (v [,options])"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2365 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2366 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2367 <p>
1813
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2368 This Luan's equivalent to Javascript's JSON.stringify(), but for a Luan value.
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2369 <code>v</code> is a value of any type which is converted to a string that is a Luan expression. <code>options</code> may be a table or a function. If <code>options</code> is a table, it may contain the following flags whose <code>true</code> value means:
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2370 </p>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2371
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2372 <ul>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2373 <li><b>strict</b> - invalid types throw an error</li>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2374 <li><b>number_types</b> - numbers will be wrapped in functions for their type</li>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2375 <li><b>compressed</b> - eliminates white space</li>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2376 <li><b>inline</b> - on one line</li>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2377 <li><b>no_name_keys</b> - forces all keys to be of the form <code>["key"]</code></li>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2378 </ul>
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2379
fa0e73119b7c docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1812
diff changeset
2380 <p>If <code>options</code> is a function then this function should take an argument <code>stack</code> and return an <code>options</code> table. The <code>stack</code> will be a list of keys indicating where stringify is currently processing. This allows different options to be applied at different places in a data structure.</p>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2381 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2382 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2383 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2384 ["Luan.to_string"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2385 title = "Luan.to_string (v)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2386 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2387 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2388 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2389 Receives a value of any type and
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2390 converts it to a string in a human-readable format.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2391 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2392
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2393 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2394 If the metatable of <code>v</code> has a <code>"__to_string"</code> field,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2395 then <code>to_string</code> calls the corresponding value
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2396 with <code>v</code> as argument,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2397 and uses the result of the call as its result.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2398 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2399 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2400 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2401 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2402 ["Luan.type"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2403 title = "Luan.type (v)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2404 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2405 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2406 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2407 Returns the type of its only argument, coded as a string.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2408 The possible results of this function are
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2409 "<code>nil</code>" (a string, not the value <b>nil</b>),
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2410 "<code>number</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2411 "<code>string</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2412 "<code>binary</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2413 "<code>boolean</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2414 "<code>table</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2415 "<code>function</code>",
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2416 and "<code>java</code>".
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2417 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2418 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2419 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2420 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2421 ["Luan.values"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2422 title = "Luan.values (&middot;&middot;&middot;)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2423 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2424 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2425 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2426 Returns a function so that the construction
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2427 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2428 <pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2429 for i, v in Luan.values(&middot;&middot;&middot;) do <em>body</em> end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2430 </pre>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2431
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2432 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2433 will iterate over all values of <code>&middot;&middot;&middot;</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2434 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2435 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2436 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2437 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2438 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2439 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2440 package_lib = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2441 title = "Modules"
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2442 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2443 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2444 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2445 Include this library by:
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2446 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2447 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2448 local Package = require "luan:Package.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2449 </code>
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2450
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2451 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2452 The package library provides basic
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2453 facilities for loading modules in Luan.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2454 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2455 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2456 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2457 subs = {
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2458 ["Package.load"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2459 title = "Package.load (mod_uri)"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2460 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2461 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2462 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2463 Loads the given module.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2464 The function starts by looking into the <a href="#Package.loaded"><code>Package.loaded</code></a> table
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2465 to determine whether <code>mod_uri</code> is already loaded.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2466 If it is, then <code>Package.load</code> returns the value stored
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2467 at <code>Package.loaded[mod_uri]</code>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2468 Otherwise, it tries to load a new value for the module.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2469 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2470
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2471 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2472 To load a new value, <code>Package.load</code> first checks if <code>mod_uri</code> starts with "<b>java:</b>". If yes, then this is a Java class which is loaded by special Java code.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2473 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2474
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2475 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2476 Otherwise <code>Package.load</code> tries to read the text of the file referred to by <code>mod_uri</code>. If the file doesn't exist, then <code>Package.load</code> returns <b>false</b>. If the file exists, then its content is compiled into a chunk by calling <a href="#Luan.load"><code>Luan.load</code></a>. This chunk is run passing in <code>mod_uri</code> as an argument. The value returned by the chunk must not be <b>nil</b> and is loaded.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2477 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2478
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2479 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2480 If a new value for the module successful loaded, then it is stored in <code>Package.loaded[mod_uri]</code>. The value is returned.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2481 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2482 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2483 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2484 }
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2485 ["Package.loaded"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2486 title = "Package.loaded"
1667
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2487 content = function()
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2488 %>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2489 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2490 A table used by <a href="#Package.load"><code>Package.load</code></a> to control which
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2491 modules are already loaded.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2492 When you load a module <code>mod_uri</code> and
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2493 <code>Package.loaded[mod_uri]</code> is not <b>nil</b>,
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2494 <a href="#Package.load"><code>Package.load</code></a> simply returns the value stored there.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2495 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2496
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2497 <p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2498 This variable is only a reference to the real table;
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2499 assignments to this variable do not change the
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2500 table used by <a href="#Package.load"><code>Package.load</code></a>.
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2501 </p>
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2502 <%
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2503 end
c55373c3a0ce manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1660
diff changeset
2504 }
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2505 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2506 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2507 string_lib = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2508 title = "String Manipulation"
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2509 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2510 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2511 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2512 Include this library by:
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2513 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2514 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2515 local String = require "luan:String.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2516 </code>
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2517
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2518 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2519 This library provides generic functions for string manipulation,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2520 such as finding and extracting substrings, and pattern matching.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2521 When indexing a string in Luan, the first character is at position&nbsp;1
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2522 (not at&nbsp;0, as in Java).
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2523 Indices are allowed to be negative and are interpreted as indexing backwards,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2524 from the end of the string.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2525 Thus, the last character is at position -1, and so on.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2526 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2527 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2528 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2529 subs = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2530 ["String.char"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2531 title = "String.char (&middot;&middot;&middot;)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2532 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2533 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2534 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2535 Receives zero or more integers.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2536 Returns a string with length equal to the number of arguments,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2537 in which each character has the internal numerical code equal
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2538 to its corresponding argument.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2539 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2540 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2541 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2542 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2543 ["String.contains"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2544 title = "String.contains (s, s2)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2545 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2546 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2547 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2548 Returns a boolean indicating whether the <code>s</code> contains <code>s2</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2549 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2550 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2551 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2552 }
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2553 ["String.digest_message"] = {
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2554 title = "String.digest_message (algorithm, s)"
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2555 content = function()
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2556 %>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2557 <p>Returns a hex digest string of <code>s</code>. Could be defined as:</p>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2558
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2559 <code block>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2560 function String.digest_message(algorithm,s)
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
2561 return <a href="manual.html#Binary.to_hex">Binary.to_hex</a>( <a href="manual.html#Binary.digest_message">Binary.digest_message</a>( algorithm, <a href="manual.html#String.to_binary">String.to_binary(s)</a> ) )
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2562 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2563 </code>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2564 <%
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2565 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2566 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2567 ["String.encode"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2568 title = "String.encode (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2569 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2570 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2571 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2572 Encodes argument <code>s</code> into a string that can be placed in quotes so as to return the original value of the string.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2573 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2574 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2575 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2576 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2577 ["String.ends_with"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2578 title = "String.ends_with (s, s2)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2579 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2580 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2581 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2582 Returns a boolean indicating whether the <code>s</code> ends with <code>s2</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2583 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2584 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2585 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2586 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2587 ["String.find"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2588 title = "String.find (s, s2 [, init])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2589 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2590 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2591 <p>
1721
5c69d2e8bd75 no regex in String.find and String.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1719
diff changeset
2592 Looks for the first substring
5c69d2e8bd75 no regex in String.find and String.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1719
diff changeset
2593 <code>s2</code> in the string <code>s</code>.
1881
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2594 If it finds a match, then <code>find</code> returns the index of <code>s</code>
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2595 where this occurrence starts;
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2596 otherwise, it returns <b>nil</b>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2597 A third, optional numerical argument <code>init</code> specifies
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2598 where to start the search;
1881
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2599 its default value is 1 and can be negative.
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2600 </p>
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2601 <%
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2602 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2603 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2604 ["String.find_reverse"] = {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2605 title = "String.find_reverse (s, s2 [, init])"
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2606 content = function()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2607 %>
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2608 <p>
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2609 Looks for the last substring
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2610 <code>s2</code> in the string <code>s</code>.
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2611 If it finds a match, then <code>find</code> returns the index of <code>s</code>
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2612 where this occurrence starts;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2613 otherwise, it returns <b>nil</b>.
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2614 A third, optional numerical argument <code>init</code> specifies
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2615 where to start the search;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1827
diff changeset
2616 its default value is -1.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2617 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2618 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2619 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2620 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2621 ["String.format"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2622 title = "String.format (formatstring, &middot;&middot;&middot;)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2623 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2624 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2625 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2626 Returns a formatted version of its variable number of arguments
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2627 following the description given in its first argument (which must be a string).
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2628 The format string follows the same rules as the Java function <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-"><code>String.format</code></a> because Luan calls this internally.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2629 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2630
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2631 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2632 Note that Java's <code>String.format</code> is too stupid to convert between ints and floats, so you must provide the right kind of number.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2633 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2634 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2635 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2636 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2637 ["String.lower"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2638 title = "String.lower (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2639 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2640 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2641 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2642 Receives a string and returns a copy of this string with all
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2643 uppercase letters changed to lowercase.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2644 All other characters are left unchanged.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2645 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2646 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2647 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2648 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2649 ["String.regex"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2650 title = "String.regex (s)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2651 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2652 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2653 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2654 Returns a <a href="#regex_table">regex</a> table for the pattern <code>s</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2655 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2656 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2657 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2658 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2659 ["String.regex_quote"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2660 title = "String.regex_quote (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2661 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2662 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2663 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2664 Returns a string which matches the literal string <code>s</code> in a regular expression. This function is simply the Java method <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#quote-java.lang.String-"><code>Pattern.quote</code></a>.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2665 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2666 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2667 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2668 }
1718
5603ee8e2a71 rename String.rep to String.repeated
Franklin Schmidt <fschmidt@gmail.com>
parents: 1717
diff changeset
2669 ["String.repeated"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2670 title = "String.repeated (s, n [, sep])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2671 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2672 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2673 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2674 Returns a string that is the concatenation of <code>n</code> copies of
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2675 the string <code>s</code> separated by the string <code>sep</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2676 The default value for <code>sep</code> is the empty string
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2677 (that is, no separator).
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2678 Returns the empty string if <code>n</code> is not positive.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2679 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2680 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2681 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2682 }
1717
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2683 ["String.replace"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2684 title = "String.replace (s, target, replacement)"
1717
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2685 content = function()
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2686 %>
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2687 <p>
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2688 Returns a string where each substring <code>target</code> in <code>s</code> is replaced by <code>replacement</code>.
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2689 </p>
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2690 <%
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2691 end
c637a2a1023d add String.replace
Franklin Schmidt <fschmidt@gmail.com>
parents: 1716
diff changeset
2692 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2693 ["String.reverse"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2694 title = "String.reverse (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2695 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2696 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2697 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2698 Returns a string that is the string <code>s</code> reversed.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2699 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2700 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2701 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2702 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2703 ["String.split"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2704 title = "String.split (s, s2 [, limit])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2705 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2706 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2707 <p>
1721
5c69d2e8bd75 no regex in String.find and String.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1719
diff changeset
2708 Splits <code>s</code> using substring <code>s2</code> and returns the results. If <code>limit</code> is positive, then only returns at most that many results. If <code>limit</code> is zero, then remove trailing empty results.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2709 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2710 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2711 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2712 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2713 ["String.starts_with"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2714 title = "String.starts_with (s, s2)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2715 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2716 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2717 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2718 Returns a boolean indicating whether the <code>s</code> starts with <code>s2</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2719 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2720 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2721 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2722 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2723 ["String.sub"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2724 title = "String.sub (s, i [, j])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2725 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2726 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2727 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2728 Returns the substring of <code>s</code> that
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2729 starts at <code>i</code> and continues until <code>j</code>;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2730 <code>i</code> and <code>j</code> can be negative.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2731 If <code>j</code> is absent, then it is assumed to be equal to -1
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2732 (which is the same as the string length).
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2733 In particular,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2734 the call <code>string.sub(s,1,j)</code> returns a prefix of <code>s</code>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2735 with length <code>j</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2736 and <code>string.sub(s, -i)</code> returns a suffix of <code>s</code>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2737 with length <code>i</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2738 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2739
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2740 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2741 If, after the translation of negative indices,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2742 <code>i</code> is less than 1,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2743 it is corrected to 1.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2744 If <code>j</code> is greater than the string length,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2745 it is corrected to that length.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2746 If, after these corrections,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2747 <code>i</code> is greater than <code>j</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2748 the function returns the empty string.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2749 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2750 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2751 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2752 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2753 ["String.to_binary"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2754 title = "String.to_binary (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2755 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2756 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2757 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2758 Converts a string to a binary by calling the Java method <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#getBytes--"><code>String.getBytes</code></a>.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2759 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2760 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2761 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2762 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2763 ["String.to_number"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2764 title = "String.to_number (s [, base])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2765 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2766 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2767 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2768 When called with no <code>base</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2769 <code>to_number</code> tries to convert its argument to a number.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2770 If the argument is
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2771 a string convertible to a number,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2772 then <code>to_number</code> returns this number;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2773 otherwise, it returns <b>nil</b>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2774 The conversion of strings can result in integers or floats.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2775 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2776
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2777 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2778 When called with <code>base</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2779 then <code>s</code> must be a string to be interpreted as
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2780 an integer numeral in that base.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2781 In bases above&nbsp;10, the letter '<code>A</code>' (in either upper or lower case)
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2782 represents&nbsp;10, '<code>B</code>' represents&nbsp;11, and so forth,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2783 with '<code>Z</code>' representing 35.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2784 If the string <code>s</code> is not a valid numeral in the given base,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2785 the function returns <b>nil</b>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2786 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2787 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2788 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2789 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2790 ["String.trim"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2791 title = "String.trim (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2792 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2793 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2794 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2795 Removes the leading and trailing whitespace by calling the Java method <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#trim--"><code>String.trim</code></a>.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2796 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2797 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2798 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2799 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2800 ["String.unicode"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2801 title = "String.unicode (s [, i [, j]])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2802 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2803 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2804 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2805 Returns the internal numerical codes of the characters <code>s[i]</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2806 <code>s[i+1]</code>, ..., <code>s[j]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2807 The default value for <code>i</code> is&nbsp;1;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2808 the default value for <code>j</code> is&nbsp;<code>i</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2809 These indices are corrected
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2810 following the same rules of function <a href="#String.sub"><code>String.sub</code></a>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2811 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2812 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2813 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2814 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2815 ["String.upper"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2816 title = "String.upper (s)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2817 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2818 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2819 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2820 Receives a string and returns a copy of this string with all
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2821 lowercase letters changed to uppercase.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2822 All other characters are left unchanged.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2823 The definition of what a lowercase letter is depends on the current locale.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2824 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2825 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2826 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2827 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2828 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
2829 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2830 regex_table = {
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2831 title = "Regular Expressions"
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2832 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2833 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2834 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2835 Regular expressions are handled using a regex table generated by <a href="#String.regex">String.regex</a>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2836 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2837
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2838 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
2839 Pattern matching is based on the Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html">Pattern</a> class.
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2840 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2841 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2842 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2843 subs = {
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2844 ["regex.find"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2845 title = "regex.find (s [, init])"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2846 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2847 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2848 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2849 Looks for the first match of
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2850 the regex in the string <code>s</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2851 If it finds a match, then <code>find</code> returns the indices of&nbsp;<code>s</code>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2852 where this occurrence starts and ends;
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2853 otherwise, it returns <b>nil</b>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2854 A third, optional numerical argument <code>init</code> specifies
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2855 where to start the search;
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2856 its default value is&nbsp;1 and can be negative.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2857 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2858
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2859 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2860 If the regex has captures,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2861 then in a successful match
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2862 the captured values are also returned,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2863 after the two indices.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2864 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2865 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2866 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2867 }
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2868 ["regex.gmatch"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2869 title = "regex.gmatch (s)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2870 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2871 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2872 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2873 Returns an iterator function that,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2874 each time it is called,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2875 returns the next captures from the regex
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2876 over the string <code>s</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2877 If the regex specifies no captures,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2878 then the whole match is produced in each call.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2879 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2880
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2881 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2882 As an example, the following loop
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2883 will iterate over all the words from string <code>s</code>,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2884 printing one per line:
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2885 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2886 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2887 local r = String.regex[[\w+]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2888 local s = "hello world from Lua"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2889 for w in r.gmatch(s) do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2890 print(w)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2891 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2892 </code>
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2893
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2894 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2895 The next example collects all pairs <code>key=value</code> from the
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2896 given string into a table:
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2897 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2898 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2899 local t = {}
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2900 local r = String.regex[[(\w+)=(\w+)]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2901 local s = "from=world, to=Lua"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2902 for k, v in r.gmatch(s) do
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2903 t[k] = v
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2904 end
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2905 </code>
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2906
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2907 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2908 For this function, a caret '<code>^</code>' at the start of a pattern does not
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2909 work as an anchor, as this would prevent the iteration.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2910 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2911 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2912 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2913 }
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2914 ["regex.gsub"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2915 title = "regex.gsub (s, repl [, n])"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2916 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2917 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2918 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2919 Returns a copy of <code>s</code>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2920 in which all (or the first <code>n</code>, if given)
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2921 occurrences of the regex have been
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2922 replaced by a replacement string specified by <code>repl</code>,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2923 which can be a string, a table, or a function.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2924 <code>gsub</code> also returns, as its second value,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2925 the total number of matches that occurred.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2926 The name <code>gsub</code> comes from <em>Global SUBstitution</em>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2927 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2928
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2929 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2930 If <code>repl</code> is a string, then its value is used for replacement.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2931 The character&nbsp;<code>\</code> works as an escape character.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2932 Any sequence in <code>repl</code> of the form <code>$<em>d</em></code>,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2933 with <em>d</em> between 1 and 9,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2934 stands for the value of the <em>d</em>-th captured substring.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2935 The sequence <code>$0</code> stands for the whole match.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2936 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2937
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2938 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2939 If <code>repl</code> is a table, then the table is queried for every match,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2940 using the first capture as the key.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2941 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2942
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2943 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2944 If <code>repl</code> is a function, then this function is called every time a
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2945 match occurs, with all captured substrings passed as arguments,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2946 in order.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2947 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2948
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2949 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2950 In any case,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2951 if the regex specifies no captures,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2952 then it behaves as if the whole regex was inside a capture.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2953 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2954
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2955 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2956 If the value returned by the table query or by the function call
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2957 is not <b>nil</b>,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2958 then it is used as the replacement string;
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2959 otherwise, if it is <b>nil</b>,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2960 then there is no replacement
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2961 (that is, the original match is kept in the string).
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2962 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2963
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2964 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2965 Here are some examples:
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2966 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2967
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2968 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2969 local r = String.regex[[(\w+)]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2970 local x = r.gsub("hello world", "$1 $1")
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2971 --&gt; x="hello hello world world"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2972
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2973 local r = String.regex[[(\w+)]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2974 local x = r.gsub("hello world", "$0 $0", 1)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2975 --&gt; x="hello hello world"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2976
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2977 local r = String.regex[[(\w+)\s*(\w+)]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2978 local x = r.gsub("hello world from Luan", "$2 $1")
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2979 --&gt; x="world hello Luan from"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2980
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2981 local r = String.regex[[\$(.*?)\$]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2982 local x = r.gsub("4+5 = $return 4+5$", function(s)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2983 return load(s)()
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2984 end)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2985 --&gt; x="4+5 = 9"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2986
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2987 local r = String.regex[[\$(\w+)]]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2988 local t = {name="lua", version="5.3"}
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2989 local x = r.gsub("$name-$version.tar.gz", t)
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2990 --&gt; x="lua-5.3.tar.gz"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2991 </code>
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2992 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2993 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2994 }
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2995 ["regex.match"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
2996 title = "regex.match (s [, init])"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2997 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2998 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
2999 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3000 Looks for the first <em>match</em> of
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3001 the regex in the string <code>s</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3002 If it finds one, then <code>match</code> returns
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3003 the captures from the regex;
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3004 otherwise it returns <b>nil</b>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3005 If the regex specifies no captures,
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3006 then the whole match is returned.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3007 A third, optional numerical argument <code>init</code> specifies
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3008 where to start the search;
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3009 its default value is&nbsp;1 and can be negative.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3010 </p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3011 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3012 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3013 }
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3014 ["regex.matches"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3015 title = "regex.matches (s)"
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3016 content = function()
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3017 %>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3018 <p>
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3019 Returns a boolean indicating whether the regex can be found in string <code>s</code>.
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3020 This function is equivalent to
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3021 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3022 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3023 return regex.match(s) ~= nil
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3024 </code>
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3025 <%
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3026 end
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3027 }
1719
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3028 ["regex.set"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3029 title = "regex.set (pattern)"
1719
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3030 content = function()
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3031 %>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3032 <p>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3033 Changes the regex pattern to <code>pattern</code>.
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3034 </p>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3035 <%
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3036 end
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3037 }
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3038 ["regex.split"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3039 title = "regex.split (s [, limit])"
1719
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3040 content = function()
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3041 %>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3042 <p>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3043 Splits <code>s</code> using the regex and returns the results. If <code>limit</code> is positive, then only returns at most that many results. If <code>limit</code> is zero, then remove trailing empty results.
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3044 </p>
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3045 <%
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3046 end
2f3a8f16f583 add regex.split
Franklin Schmidt <fschmidt@gmail.com>
parents: 1718
diff changeset
3047 }
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3048 }
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3049 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3050 binary_lib = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3051 title = "Binary Manipulation"
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3052 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3053 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3054 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3055 Include this library by:
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3056 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3057 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3058 local Binary = require "luan:Binary.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3059 </code>
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3060 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3061 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3062 subs = {
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3063 ["Binary.base64_decode"] = {
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3064 title = "Binary.base64_decode (s)"
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3065 content = function()
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3066 %>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3067 <p>Same as Java's <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Decoder.html#decode-java.lang.String-">Base64.Decoder.decode</a>.</p>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3068 <%
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3069 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3070 }
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3071 ["Binary.base64_encode"] = {
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3072 title = "Binary.base64_encode (b)"
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3073 content = function()
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3074 %>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3075 <p>Same as Java's <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html#encodeToString-byte:A-">Base64.Encoder.encodeToString</a>.</p>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3076 <%
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3077 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3078 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3079 ["Binary.binary"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3080 title = "Binary.binary (&middot;&middot;&middot;)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3081 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3082 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3083 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3084 Receives zero or more bytes (as integers).
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3085 Returns a binary with length equal to the number of arguments,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3086 in which each byte has the internal numerical code equal
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3087 to its corresponding argument.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3088 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3089 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3090 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3091 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3092 ["Binary.byte"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3093 title = "Binary.byte (b [, i [, j]])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3094 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3095 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3096 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3097 Returns the internal numerical codes of the bytes <code>b[i]</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3098 <code>b[i+1]</code>, ..., <code>b[j]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3099 The default value for <code>i</code> is&nbsp;1;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3100 the default value for <code>j</code> is&nbsp;<code>i</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3101 These indices are corrected
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3102 following the same rules of function <a href="#String.sub"><code>String.sub</code></a>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3103 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3104 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3105 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3106 }
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3107 ["Binary.digest_message"] = {
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3108 title = "Binary.digest_message (algorithm, b)"
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3109 content = function()
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3110 %>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3111 <p>Implemented in Java as:</p>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3112
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3113 <code block>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3114 return <a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html">MessageDigest</a>.<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#getInstance-java.lang.String-">getInstance</a>(algorithm).<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#digest-byte:A-">digest</a>(b);
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3115 </code>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3116 <%
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3117 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3118 }
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3119 ["Binary.to_hex"] = {
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3120 title = "Binary.to_hex (b)"
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3121 content = function()
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3122 %>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3123 <p>Converts a binary to a hex string.</p>
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3124 <%
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3125 end
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3126 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3127 ["Binary.to_string"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3128 title = "Binary.to_string (b [,charset])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3129 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3130 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3131 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3132 If <code>charset</code> is not nil then converts the binary <code>b</code> to a string using the Java <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-byte:A-java.lang.String-">String constructor</a>, else makes each byte a char.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3133 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3134 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3135 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3136 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3137 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3138 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3139 table_lib = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3140 title = "Table Manipulation"
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3141 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3142 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3143 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3144 Include this library by:
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3145 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3146 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3147 local Table = require "luan:Table.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3148 </code>
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3149
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3150 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3151 This library provides generic functions for table manipulation.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3152 It provides all its functions inside the table <code>Table</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3153 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3154 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3155 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3156 subs = {
1817
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3157 ["Table.case_insensitive"] = {
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3158 title = "Table.case_insensitive ([tbl])"
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3159 content = function()
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3160 %>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3161 <p>Returns a table with case-insensitive string keys. Copies <code>tbl</code> or is empty.</p>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3162 <%
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3163 end
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3164 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3165 ["Table.clear"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3166 title = "Table.clear (tbl)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3167 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3168 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3169 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3170 Clears the table.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3171 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3172 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3173 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3174 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3175 ["Table.concat"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3176 title = "Table.concat (list [, sep [, i [, j]]])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3177 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3178 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3179 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3180 Given a list,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3181 returns the string <code>list[i]..sep..list[i+1] &middot;&middot;&middot; sep..list[j]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3182 The default value for <code>sep</code> is the empty string,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3183 the default for <code>i</code> is 1,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3184 and the default for <code>j</code> is <code>#list</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3185 If <code>i</code> is greater than <code>j</code>, returns the empty string.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3186 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3187 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3188 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3189 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3190 ["Table.copy"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3191 title = "Table.copy (tbl [, i [, j]])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3192 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3193 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3194 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3195 If <code>i</code> is <code>nil</code>, returns a shallow copy of <code>tbl</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3196 Otherwise returns a new table which is a list of the elements <code>tbl[i] &middot;&middot;&middot; tbl[j]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3197 By default, <code>j</code> is <code>#tbl</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3198 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3199 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3200 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3201 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3202 ["Table.insert"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3203 title = "Table.insert (list, pos, value)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3204 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3205 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3206 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3207 Inserts element <code>value</code> at position <code>pos</code> in <code>list</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3208 shifting up the elements
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3209 <code>list[pos], list[pos+1], &middot;&middot;&middot;, list[#list]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3210 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3211 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3212 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3213 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3214 ["Table.is_empty"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3215 title = "Table.is_empty (tbl)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3216 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3217 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3218 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3219 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3220 }
1704
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3221 ["Table.is_list"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3222 title = "Table.is_list (tbl)"
1704
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3223 content = function()
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3224 %>
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3225 <%
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3226 end
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1680
diff changeset
3227 }
1817
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3228 ["Table.java_to_table_deep"] = {
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3229 title = "Table.java_to_table_deep (obj [, java_to_table_shallow])"
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3230 content = function()
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3231 %>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3232 <p>Recursively applies <code>java_to_table_shallow</code> to convert a Java object to nested tables. <code>java_to_table_shallow</code> defaults to <a href="#Table.java_to_table_shallow">Table.java_to_table_shallow</a>.</p>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3233 <%
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3234 end
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3235 }
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3236 ["Table.java_to_table_shallow"] = {
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3237 title = "Table.java_to_table_shallow (obj)"
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3238 content = function()
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3239 %>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3240 <p>Converts a Java object to a table. Works for collection types List, Map, Set, and Java arrays.</p>
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3241 <%
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3242 end
969ced346cef docs - Table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1816
diff changeset
3243 }
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3244 ["Table.pack"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3245 title = "Table.pack (&middot;&middot;&middot;)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3246 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3247 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3248 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3249 Returns a new table with all parameters stored into keys 1, 2, etc.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3250 and with a field "<code>n</code>" with the total number of parameters.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3251 Note that the resulting table may not be a sequence.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3252 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3253 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3254 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3255 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3256 ["Table.remove"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3257 title = "Table.remove (list, pos)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3258 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3259 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3260 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3261 Removes from <code>list</code> the element at position <code>pos</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3262 returning the value of the removed element.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3263 When <code>pos</code> is an integer between 1 and <code>#list</code>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3264 it shifts down the elements
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3265 <code>list[pos+1], list[pos+2], &middot;&middot;&middot;, list[#list]</code>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3266 and erases element <code>list[#list]</code>;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3267 The index <code>pos</code> can also be 0 when <code>#list</code> is 0,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3268 or <code>#list + 1</code>;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3269 in those cases, the function erases the element <code>list[pos]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3270 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3271 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3272 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3273 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3274 ["Table.size"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3275 title = "Table.size (tbl)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3276 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3277 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3278 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3279 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3280 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3281 ["Table.sort"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3282 title = "Table.sort (list [, comp])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3283 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3284 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3285 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3286 Sorts list elements in a given order, <em>in-place</em>,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3287 from <code>list[1]</code> to <code>list[#list]</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3288 If <code>comp</code> is given,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3289 then it must be a function that receives two list elements
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3290 and returns true when the first element must come
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3291 before the second in the final order
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3292 (so that <code>not comp(list[i+1],list[i])</code> will be true after the sort).
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3293 If <code>comp</code> is not given,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3294 then the standard Lua operator <code>&lt;</code> is used instead.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3295 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3296
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3297 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3298 The sort algorithm is not stable;
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3299 that is, elements considered equal by the given order
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3300 may have their relative positions changed by the sort.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3301 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3302 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3303 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3304 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3305 ["Table.unpack"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3306 title = "Table.unpack (list [, i [, j]])"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3307 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3308 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3309 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3310 Returns the elements from the given list.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3311 This function is equivalent to
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3312 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3313 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3314 return list[i], list[i+1], &middot;&middot;&middot;, list[j]
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3315 </code>
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3316
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3317 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3318 By default, <code>i</code> is 1 and <code>j</code> is <code>list.n or #list</code>.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3319 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3320 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3321 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3322 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3323 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3324 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3325 number_lib = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3326 title = "Number Manipulation"
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3327 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3328 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3329 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3330 Include this library by:
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3331 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3332 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3333 local Number = require "luan:Number.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3334 </code>
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3335 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3336 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3337 subs = {
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3338 ["Number.double"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3339 title = "Number.double (x)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3340 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3341 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3342 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3343 Returns <code>x</code> as a double.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3344 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3345 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3346 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3347 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3348 ["Number.float"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3349 title = "Number.float (x)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3350 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3351 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3352 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3353 Returns <code>x</code> as a float.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3354 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3355 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3356 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3357 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3358 ["Number.integer"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3359 title = "Number.integer (x)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3360 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3361 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3362 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3363 If the value <code>x</code> is convertible to an integer,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3364 returns that integer.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3365 Otherwise throws an error.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3366 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3367 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3368 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3369 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3370 ["Number.long"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3371 title = "Number.long (x)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3372 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3373 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3374 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3375 If the value <code>x</code> is convertible to an long,
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3376 returns that long.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3377 Otherwise throws an error.
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3378 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3379 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3380 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3381 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3382 ["Number.long_to_string"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3383 title = "Number.long_to_string (i, radix)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3384 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3385 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3386 <p>
1816
e62c88b2883b docs work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1813
diff changeset
3387 Converts long value <code>i</code> to a string by calling <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#toString-long-int-">Long.toString</a></code>.
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3388 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3389 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3390 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3391 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3392 ["Number.type"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3393 title = "Number.type (x)"
1668
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3394 content = function()
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3395 %>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3396 <p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3397 Returns a string for the numeric type of <code>x</code>. Possible return values include "<code>integer</code>", "<code>long</code>", "<code>double</code>", and "<code>float</code>".
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3398 </p>
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3399 <%
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3400 end
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3401 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3402 }
ef75d9ad5ce9 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1667
diff changeset
3403 }
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3404 math_lib = {
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3405 title = "Mathematical Functions"
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3406 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3407 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3408 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3409 Include this library by:
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3410 </p>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3411 <code block>
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3412 local Math = require "luan:Math.luan"
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3413 </code>
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3414
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3415 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3416 This library provides basic mathematical functions.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3417 It provides all its functions and constants inside the table <code>Math</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3418 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3419 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3420 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3421 subs = {
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3422 ["Math.abs"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3423 title = "Math.abs (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3424 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3425 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3426 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3427 Returns the absolute value of <code>x</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3428 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3429 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3430 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3431 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3432 ["Math.acos"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3433 title = "Math.acos (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3434 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3435 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3436 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3437 Returns the arc cosine of <code>x</code> (in radians).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3438 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3439 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3440 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3441 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3442 ["Math.asin"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3443 title = "Math.asin (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3444 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3445 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3446 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3447 Returns the arc sine of <code>x</code> (in radians).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3448 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3449 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3450 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3451 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3452 ["Math.atan"] = {
1818
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3453 title = "Math.atan (a)"
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3454 content = function()
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3455 %>
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3456 <p>
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3457 Returns the arc tangent of a value; the returned angle is in the range -pi/2 through pi/2.</p>
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3458 <%
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3459 end
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3460 }
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3461 ["Math.atan2"] = {
d3e6c7f64559 docs - Math
Franklin Schmidt <fschmidt@gmail.com>
parents: 1817
diff changeset
3462 title = "Math.atan2 (y, x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3463 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3464 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3465 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3466 Returns the arc tangent of <code>y/x</code> (in radians),
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3467 but uses the signs of both parameters to find the
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3468 quadrant of the result.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3469 (It also handles correctly the case of <code>x</code> being zero.)
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3470 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3471 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3472 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3473 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3474 ["Math.ceil"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3475 title = "Math.ceil (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3476 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3477 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3478 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3479 Returns the smallest integral value larger than or equal to <code>x</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3480 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3481 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3482 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3483 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3484 ["Math.cos"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3485 title = "Math.cos (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3486 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3487 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3488 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3489 Returns the cosine of <code>x</code> (assumed to be in radians).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3490 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3491 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3492 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3493 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3494 ["Math.deg"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3495 title = "Math.deg (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3496 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3497 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3498 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3499 Converts the angle <code>x</code> from radians to degrees.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3500 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3501 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3502 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3503 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3504 ["Math.exp"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3505 title = "Math.exp (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3506 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3507 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3508 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3509 Returns the value <em>e<sup>x</sup></em>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3510 (where <code>e</code> is the base of natural logarithms).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3511 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3512 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3513 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3514 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3515 ["Math.floor"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3516 title = "Math.floor (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3517 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3518 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3519 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3520 Returns the largest integral value smaller than or equal to <code>x</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3521 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3522 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3523 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3524 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3525 ["Math.fmod"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3526 title = "Math.fmod (x, y)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3527 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3528 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3529 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3530 Returns the remainder of the division of <code>x</code> by <code>y</code>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3531 that rounds the quotient towards zero.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3532 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3533 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3534 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3535 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3536 ["Math.huge"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3537 title = "Math.huge"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3538 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3539 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3540 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3541 A value larger than any other numerical value.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3542 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3543 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3544 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3545 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3546 ["Math.log"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3547 title = "Math.log (x [, base])"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3548 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3549 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3550 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3551 Returns the logarithm of <code>x</code> in the given base.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3552 The default for <code>base</code> is <em>e</em>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3553 (so that the function returns the natural logarithm of <code>x</code>).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3554 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3555 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3556 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3557 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3558 ["Math.max"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3559 title = "Math.max (x, &middot;&middot;&middot;)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3560 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3561 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3562 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3563 Returns the argument with the maximum value,
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3564 according to the Lua operator <code>&lt;</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3565 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3566 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3567 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3568 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3569 ["Math.max_integer"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3570 title = "Math.max_integer"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3571 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3572 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3573 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3574 An integer with the maximum value for an integer.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3575 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3576 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3577 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3578 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3579 ["Math.min"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3580 title = "Math.min (x, &middot;&middot;&middot;)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3581 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3582 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3583 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3584 Returns the argument with the minimum value,
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3585 according to the Lua operator <code>&lt;</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3586 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3587 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3588 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3589 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3590 ["Math.min_integer"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3591 title = "Math.min_integer"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3592 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3593 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3594 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3595 An integer with the minimum value for an integer.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3596 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3597 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3598 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3599 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3600 ["Math.modf"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3601 title = "Math.modf (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3602 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3603 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3604 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3605 Returns the integral part of <code>x</code> and the fractional part of <code>x</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3606 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3607 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3608 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3609 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3610 ["Math.pi"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3611 title = "Math.pi"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3612 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3613 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3614 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3615 The value of <em>&pi;</em>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3616 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3617 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3618 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3619 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3620 ["Math.rad"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3621 title = "Math.rad (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3622 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3623 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3624 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3625 Converts the angle <code>x</code> from degrees to radians.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3626 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3627 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3628 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3629 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3630 ["Math.random"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3631 title = "Math.random ([m [, n])"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3632 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3633 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3634 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3635 When called without arguments,
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3636 returns a pseudo-random float with uniform distribution
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3637 in the range <em>[0,1)</em>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3638 When called with two integers <code>m</code> and <code>n</code>,
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3639 <code>Math.random</code> returns a pseudo-random integer
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3640 with uniform distribution in the range <em>[m, n]</em>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3641 (The value <em>m-n</em> cannot be negative and must fit in a Luan integer.)
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3642 The call <code>Math.random(n)</code> is equivalent to <code>Math.random(1,n)</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3643 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3644
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3645 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3646 This function is an interface to the underling
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3647 pseudo-random generator function provided by Java.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3648 No guarantees can be given for its statistical properties.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3649 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3650 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3651 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3652 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3653 ["Math.sin"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3654 title = "Math.sin (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3655 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3656 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3657 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3658 Returns the sine of <code>x</code> (assumed to be in radians).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3659 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3660 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3661 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3662 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3663 ["Math.sqrt"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3664 title = "Math.sqrt (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3665 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3666 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3667 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3668 Returns the square root of <code>x</code>.
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3669 (You can also use the expression <code>x^0.5</code> to compute this value.)
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3670 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3671 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3672 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3673 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3674 ["Math.tan"] = {
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3675 title = "Math.tan (x)"
1669
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3676 content = function()
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3677 %>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3678 <p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3679 Returns the tangent of <code>x</code> (assumed to be in radians).
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3680 </p>
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3681 <%
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3682 end
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3683 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3684 }
fdeb1879fe02 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents: 1668
diff changeset
3685 }
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3686 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3687 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3688 }
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3689
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3690
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3691 return function()
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3692 local lang = get_lang()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3693 local html = `
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3694 %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3695 <!doctype html>
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3696 <html lang="<%=lang%>">
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3697 <head>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3698 <% head() %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3699 <title>Luan Reference Manual</title>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3700 <style>
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3701 p[list] {
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3702 font-family: monospace;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3703 margin-left: 40px;
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3704 }
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3705 p[list] span {
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3706 display: inline-block;
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3707 }
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3708 p[list=keywords] {
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3709 max-width: 700px;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3710 }
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3711 p[list=keywords] span {
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3712 width: 100px;
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3713 }
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3714 p[list=tokens] {
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3715 max-width: 400px;
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3716 }
1812
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3717 p[list=tokens] span {
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3718 width: 50px;
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3719 }
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3720 li[c_libs] li li > a {
f44dcb3fedf7 docs - add code block
Franklin Schmidt <fschmidt@gmail.com>
parents: 1797
diff changeset
3721 font-family: monospace;
1716
b82767112d8e add String.regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 1704
diff changeset
3722 }
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3723 </style>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3724 </head>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3725 <body>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3726 <% docs_header() %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3727 <div content>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3728 <h1><a href="manual.html">Luan Reference Manual</a></h1>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3729 <p small>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3730 Original copyright &copy; 2015 Lua.org, PUC-Rio.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3731 Freely available under the terms of the
1827
50e570b598b2 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1818
diff changeset
3732 <a href="https://www.lua.org/license.html">Lua license</a>.
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3733 Modified for Luan.
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3734 </p>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3735 <hr>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3736 <h2>Contents</h2>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3737 <div toc>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3738 <% show_toc(content) %>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3739 </div>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3740 <hr>
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3741 <div placeholder></div>
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3742 </div>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3743 </body>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3744 </html>
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3745 <%
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3746 `
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3747 if lang == "en" then
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3748 html = replace( html, "<div placeholder></div>", `show_content(content,2)` )
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3749 else
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3750 local language = languages[lang] or error(lang)
1938
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
3751 html = translate_html(html,language,true)
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3752 local parts = {}
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3753 for id, info in pairs(content) do
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3754 local part = `show_content_info(id,info,2)`
1938
bd00b36380d9 ai options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1929
diff changeset
3755 part = translate_html(part,language,true)
1929
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3756 parts[#parts+1] = part
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3757 end
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3758 html = replace( html, "<div placeholder></div>", concat(parts) )
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3759 set_translated()
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3760 end
31f006c64782 translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 1926
diff changeset
3761 text_writer().write(html)
1656
540bf2343078 manual work
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3762 end