annotate website/src/manual.html.luan @ 1929:31f006c64782

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