From 7b88c25271448cb717bea52abc52e2c8ec033dd9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 17 Dec 2022 03:01:08 +0000 Subject: CTAN sync 202212170301 --- macros/luatex/generic/luakeys/luakeys.lua | 38 +++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 9 deletions(-) (limited to 'macros/luatex/generic/luakeys/luakeys.lua') 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, -- cgit v1.2.3