From ddeabe22b85a6196972b0208f67feb4b308e4238 Mon Sep 17 00:00:00 2001 From: Bastien Dumont Date: Mon, 22 Dec 2025 11:00:21 +0100 Subject: [PATCH] text-crossrefs: required escapes in Typst --- text-crossrefs/text-crossrefs.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/text-crossrefs/text-crossrefs.lua b/text-crossrefs/text-crossrefs.lua index cf54942..082db03 100644 --- a/text-crossrefs/text-crossrefs.lua +++ b/text-crossrefs/text-crossrefs.lua @@ -132,13 +132,22 @@ local function format_config_to_openxml() end end +local function typst_escape(s, k) + if FORMAT == 'typst' and k ~= 'tcrf-references-enum-separator' + and k ~= 'tcrf-range-delim-crossrefenum' + then + s = string.gsub(s, '^([;#])', '#"%1"') + end + return s +end + local function set_configuration_item_from_metadata(item, metamap) local metakey = 'tcrf-' .. string.gsub(item, '_', '-') if metamap[metakey] then if IS_CONFIG_ARRAY[item] then -- The metadata values is a list of MetaInlines. for _, value_metalist in ipairs(metamap[metakey]) do - table.insert(config[item], stringify(value_metalist)) + table.insert(config[item], typst_escape(stringify(value_metalist), metakey)) end else local value = metamap[metakey] @@ -146,7 +155,7 @@ local function set_configuration_item_from_metadata(item, metamap) config[item] = value else -- The metadata value is a MetaInlines. - config[item] = stringify(value) + config[item] = typst_escape(stringify(value), metakey) end end end