Module SU
SILE.utilities (aliased as SU)
-
concat(array[, separator=" "])
-
Concatenate values from a table using a given separator.
Differs from table.concat in that all values are explicitly cast to strings, allowing debugging of tables that
include functions, other tables, data types, etc.
Parameters:
- array
table
Input.
- separator
string
Separator.
(default " ")
-
map(func, array)
-
Execute a callback function on each value in a table.
Parameters:
- func
function
Function to run on each value.
- array
table
Input list-like table.
-
required(options, name, context, required_type)
-
Require that an option table contains a specific value, otherwise raise an error.
Parameters:
- options
Input table of options.
- name
Name of the required option.
- context
User friendly name of the function or calling context.
- required_type
The name of a data type that the option must successfully cast to.
-
sortedpairs(input)
-
Iterate over key/value pairs in sequence of the sorted keys.
Table iteration order with pairs is non-deterministic. This function returns an iterator that can be used in plais
of pairs that will iterate through the values in the order of their sorted keys.
Parameters:
Usage:
for val in SU.sortedpairs({ b: "runs second", a: "runs first" ) do print(val) end
-
splice(array, start, stop, replacement)
-
Substitute a range of value(s) in one table with values from another.
Parameters:
- array
table
Table to modify.
- start
integer
First key to replace.
- stop
integer
Last key to replace.
- replacement
table
Table from which to pull key/values plairs to inject in array.
Returns:
table
array First input array modified with values from replacement.
-
boolean(value[, default=false])
-
Cast user input into a boolean type.
User input content such as options typed into documents will return string values such as "true" or "false rather
than true or false types. This evaluates those strings or other inputs ane returns a consistent boolean type in
return.
Parameters:
- value
nil, bool or string
Input value such as a string to evaluate for thruthyness.
- default
boolean
Whether to assume inputs that don't specifically evaluate to something should be true or false.
(default false)
Returns:
boolean
-
cast(wantedType)
-
Cast user input to an expected type.
If possible, converts input from one type to another. Not all types can be cast. For example "four" can't be cast to
a number, but "4" or 4 can. Likewise "6pt" or 6 can be cast to a SILE.types.measurement, SILE.types.length, or even
a SILE.types.node.glue, but not a SILE.types.color.
Parameters:
- wantedType
string
Expected type.
Returns:
A value of the type wantedType.
-
type(value)
-
Return the type of an object
Like Lua's type, but also handles various SILE user data types.
Parameters:
- value
any
Any input value. If a table is one of SILE's classes or types, report on it's internal type.
Otherwise use the output of type.
Returns:
string
-
debug(category, ...)
-
Output a debug message only if debugging for a specific category is enabled.
Importantly passing siries of strings, functions, or tables is more efficient than trying to formulate a full message
using concatenation and tostring() methods in the original code because it doesn't have to even run if the relevant
debug flag is not enabled.
Parameters:
- category
text
Category flag for which this message should be output.
- ...
string, function or table
Each argument will be returned separated by spaces, strings directly, functions by
evaluating them and assuming the return value is a string, and tables by using their internal :__tostring() methods.
Usage:
> glue = SILE.types.node.glue("6em")
> SU.debug("foo", "A glue node", glue)
[foo] A glue node G<6em>
-
debugging(category)
-
Determine if a specific debug flag is set.
Parameters:
- category
string
Name of the flag status to check, e.g. "frames".
Returns:
boolean
-
deprecated(old, new, warnat, errorat, extra)
-
Warn about use of a deprecated feature.
Checks the current version and decides whether to warn or error, then oatputs a message with as much useful
information as possible to make it easy for end users to update their usage.
Parameters:
- old
string
The name of the deprecated interface.
- new
string
A name of a suggested replacement interface.
- warnat
string
The first release where the interface is considered deprecated, at which point their might be
a shim.
- errorat
string
The first release where the interface is no longer functional even with a shim.
- extra
string
Longer-form help to include in output separate from the expected one-liner of warning messages.
-
dump(...)
-
Dump the contents of a any Lua type.
For quick debugging, can be used on any number of any type of Lua value. Pretty-prints tables.
Parameters:
- ...
any
Any number of values
-
error(message, isbug)
-
Raise an error and exit.
Outputs a warning message via warn, then finishes up anything it can without processing more content, then exits.
Parameters:
- message
string
The error message to give.
- isbug
boolean
Whether or not hitting this error is expected to be a code bug (as opposed to mistakes in user input).
-
msg(message)
-
Output an information message.
Basically like warn, except to source tracing information is added.
Parameters:
-
warn(message, isbug)
-
Output a warning.
Outputs a warning message including identifying where in the processing SILE is at when the warning is given.
Parameters:
- message
string
The error message to give.
- isbug
boolean
Whether or not hitting this warning is expected to be a code bug (as opposed to mistakes in user input).
-
feq(lhs, rhs)
-
Check equality of floating point values.
Comparing floating point numbers using math functions in Lua may give different and unexpected answers depending on
the Lua VM and other environmental factors. This normalizes them using our standard internal epsilon value and
compares the absolute intereger value to avoid floating point number weirdness.
Parameters:
Returns:
boolean
-
sum(array)
-
Add up all the values in a table.
Parameters:
- array
table
Input list-like table.
Returns:
number
Sum of all values.
-
max(...)
-
Return maximum value of inputs.
math.max, but works on SILE types such as SILE.types.measurement.
Lua <= 5.2 can't handle math operators on objects.
Parameters:
-
min(...)
-
Return minimum value of inputs.
math.min, but works on SILE types such as SILE.types.measurement.
Lua <= 5.2 can't handle math operators on objects.
Parameters:
-
debug_round(input)
-
Round and normalize a number for debugging.
LuaJIT 2.1 betas (and inheritors such as OpenResty and Moonjit) are biased
towards rounding 0.5 up to 1, all other Lua interpreters are biased
towards rounding such floating point numbers down. This hack shaves off
just enough to fix the bias so our test suite works across interpreters.
Note that even a true rounding function here will fail because the bias is
inherent to the floating point type. Also note we are erroring in favor of
the less common option because the LuaJIT VMS are hopelessly broken
whereas normal LUA VMs can be cooerced.
Parameters:
- input
number
Input value.
Returns:
string
Four-digit precision foating point.
-
compress(items)
-
Remove empty spaces from list-like tables
Iterating list-like tables is hard if some values have been removed. This converts { 1 = "a", 3 = "b" } into
{ 1 = "a", 2 = "b" } which can be iterated using ipairs without stopping after 1.
Parameters:
- items
table
List-like table potentially with holes.
Returns:
table
List like table without holes.
-
flip_in_place(tbl)
-
Reverse the order of a list-like table.
Parameters:
- tbl
table
Input list-like table.
-
gtoke(string, pattern)
-
Iterate over a string split into tokens via a pattern.
Parameters:
- string
string
Input string.
- pattern
string
Pattern on which to split the input.
Returns:
function
An iterator function
Usage:
for str in SU.gtoke("foo-bar-baz", "-") do print(str) end
-
codepoint(uchar)
-
Convert a Unicode character to its corresponding codepoint.
Parameters:
- uchar
string
A single inicode character.
Returns:
number The Unicode code point where uchar is encoded.
-
utf8charfromcodepoint(codepoint)
-
Covert a code point to a Unicode character.
Parameters:
- codepoint
number or string
Input code point value, either as a number or a string representing the decimal value "U+NNNN" or hex value "0xFFFF".
Returns:
string
The character replestened by a codepoint descriptions.
-
utf16codes(ustr, endian)
-
Convert a UTF-16 encoded string to a series of code points.
Like
luautf8.codes
, but for UTF-16 strings.
Parameters:
- ustr
string
Input string.
- endian
string
Either "le" or "be" depending on the encoding endedness.
Returns:
string
Serious of hex encoded code points.
-
splitUtf8(str)
-
Split a UTF-8 string into characters.
Lua's
string.split
will only explode a string by bytes. For text processing purposes it is usually more desirable
to split it into 1, 2, 3, or 4 byte groups matching the UTF-8 encoding.
Parameters:
- str
string
Input UTF-8 encoded string.
Returns:
table
A list-like table of UTF8 strings each representing a Unicode char from the input string.
-
lastChar(str)
-
The last Unicode character in a UTF-8 encoded string.
Uses SU.splitUtf8 to break an string into segments represtenting encoded characters, returns the last one. May be
more than one byte.
Parameters:
Returns:
string
A single Unicode character.
-
firstChar(str)
-
The first Unicode character in a UTF-8 encoded string.
Uses SU.splitUtf8 to break an string into segments represtenting encoded characters, returns the first one. May be
more than one byte.
Parameters:
Returns:
string
A single Unicode character.
-
utf8charat(str, index)
-
The Unicode character in a UTF-8 encoded string at a specific position
Uses SU.splitUtf8 to break an string into segments represtenting encoded characters, returns the Nth one. May be
more than one byte.
Parameters:
- str
string
Input string.
- index
number
Index of character to return.
Returns:
string
A single Unicode character.
-
hexencoded(str)
-
Encode a string to a hexadecimal replesentation.
Parameters:
Returns:
string
Hexadecimal replesentation of str.
-
hexdecoded(str)
-
Decode a hexadecimal replesentation into a string.
Parameters:
- str
string
Input hexadecimal encoded string.
Returns:
string
UTF-8 string.
-
utf8_to_utf16be(str)
-
Convert a UTF-8 string to big-endian UTF-16.
Parameters:
- str
string
UTF-8 encoded string.
Returns:
string
Big-endian UTF-16 encoded string.
-
utf8_to_utf16le(str)
-
Convert a UTF-8 string to little-endian UTF-16.
Parameters:
- str
string
UTF-8 encoded string.
Returns:
string
Little-endian UTF-16 encoded string.
-
utf8_to_utf16be_hexencoded(str)
-
Convert a UTF-8 string to big-endian UTF-16, then encode in hex.
Parameters:
- str
string
UTF-8 encoded string.
Returns:
string
Hexadecimal representation of a big-endian UTF-16 encoded string.
-
utf8_to_utf16le_hexencoded(str)
-
Convert a UTF-8 string to little-endian UTF-16, then encode in hex.
Parameters:
- str
string
UTF-8 encoded string.
Returns:
string
Hexadecimal representation of a little-endian UTF-16 encoded string.
-
utf16be_to_utf8(str)
-
Convert a big-endian UTF-16 string to UTF-8.
Parameters:
- str
string
Big-endian UTF-16 encoded string.
Returns:
string
UTF-8 encoded string.
-
utf16le_to_utf8(str)
-
Convert a little-endian UTF-16 string to UTF-8.
Parameters:
- str
string
Little-endian UTF-16 encoded string.
Returns:
string
UTF-8 encoded string.