summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luakeys/luakeys.lua
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-12-17 03:01:08 +0000
committerNorbert Preining <norbert@preining.info>2022-12-17 03:01:08 +0000
commit7b88c25271448cb717bea52abc52e2c8ec033dd9 (patch)
treea7426f0f4c86b506e536350fd35f8bd9e36f59fa /macros/luatex/generic/luakeys/luakeys.lua
parent14c4ab52b25f4384f6db7938c2666fdd0f75a723 (diff)
CTAN sync 202212170301
Diffstat (limited to 'macros/luatex/generic/luakeys/luakeys.lua')
-rw-r--r--macros/luatex/generic/luakeys/luakeys.lua38
1 files changed, 29 insertions, 9 deletions
diff --git a/macros/luatex/generic/luakeys/luakeys.lua b/macros/luatex/generic/luakeys/luakeys.lua
index a220413390..333b357308 100644
--- a/macros/luatex/generic/luakeys/luakeys.lua
+++ b/macros/luatex/generic/luakeys/luakeys.lua
@@ -178,15 +178,18 @@ local namespace = {
default = true,
defaults = false,
defs = false,
+ false_aliases = { 'false', 'FALSE', 'False' },
format_keys = false,
group_begin = '{',
group_end = '}',
hooks = {},
+ invert_flag = '!',
list_separator = ',',
naked_as_value = false,
no_error = false,
quotation_begin = '"',
quotation_end = '"',
+ true_aliases = { 'true', 'TRUE', 'True' },
unpack = true,
},
@@ -439,6 +442,18 @@ local function generate_parser(initial_rule, opts)
return white_space ^ 0 * Pattern(match) * white_space ^ 0
end
+ local line_up_pattern = function(patterns)
+ local result
+ for _, pattern in ipairs(patterns) do
+ if result == nil then
+ result = Pattern(pattern)
+ else
+ result = result + Pattern(pattern)
+ end
+ end
+ return result
+ end
+
--- Convert a dimension to an normalized dimension string or an
--- integer in the scaled points format.
---
@@ -534,15 +549,9 @@ local function generate_parser(initial_rule, opts)
Variable('boolean_false') * CaptureConstant(false)
),
- boolean_true =
- Pattern('true') +
- Pattern('TRUE') +
- Pattern('True'),
+ boolean_true = line_up_pattern(opts.true_aliases),
- boolean_false =
- Pattern('false') +
- Pattern('FALSE') +
- Pattern('False'),
+ boolean_false = line_up_pattern(opts.false_aliases),
-- for is.dimension()
dimension_only = Variable('dimension') * -1,
@@ -1191,6 +1200,13 @@ local function parse(kv_string, opts)
end
return key, value
end,
+
+ apply_invert_flag = function(key, value)
+ if type(key) == 'string' and key:find(opts.invert_flag) then
+ return key:gsub(opts.invert_flag, ''), not value
+ end
+ return key, value
+ end,
}
if opts.unpack then
@@ -1210,6 +1226,10 @@ local function parse(kv_string, opts)
result = visit_tree(result, callbacks.format_key)
end
+ if opts.invert_flag then
+ result = visit_tree(result, callbacks.apply_invert_flag)
+ end
+
return result
end
result = apply_opts(result, opts)
@@ -1250,7 +1270,7 @@ local result_store = {}
-- @section
local export = {
- version = { 0, 9, 0 },
+ version = { 0, 10, 0 },
namespace = namespace,